#登入mysql
mysql -u username -p password
#退出mysql伺服器
exit
'''
顯示所有資料庫
'''show databases;
'''建立名為mydatabase資料庫
'''create database mydatabase;
'''切換資料庫
'''use mydatabase;
'''顯示當前資料庫中的所有表
'''show tables;
'''建立名為pet的資料表
'''create table pet(
name varchar(20),
owner varchar(20),
species varchar(20),
*** char(1),
birth date,
death date
);'''
檢視資料表結構
-- describe pet;
'''desc pet;
'''查詢表
'''select * from pet;
'''插入資料
'''insert into pet values('puffball', 'diane', 'hamster', 'f', '1990-03-30', null);
'''修改資料
'''update pet set name = 'squirrel' where owner = 'diane';
'''刪除資料
'''delete from pet where name = 'squirrel';
'''刪除pet表
'''drop table pet;
'''
主鍵約束
使某個欄位不重複且不能為空,確保表內所有資料的唯一性
'''create table user(
id int primary key,
name varchar(20)
);'''
聯合主鍵
聯合主鍵中的每個欄位都不能為空,並且加起來不能和已設定的聯合主鍵重複。
'''create table user (
id int,
name varchar(20),
password varchar(20),
primary key(id, name)
);'''
自增約束
自增約束的主鍵由系統自動遞增分配。
'''create table user (
id int primary key auto_increment,
name varchar(20)
);'''
新增主鍵約束
如果忘記設定主鍵,還可以通過sql語句設定(兩種方式);
'''alter table user add primary key(id);
alter table user modify id int primary key;
'''刪除主鍵
'''alter table user drop primary key;
'''
建表時建立唯一主鍵
'''create table user (
id int,
name varchar(20),
unique(name)
);'''
新增唯一主鍵
如果建表時沒有設定唯一主鍵,還可以通過sql語句設定(兩種方式)
'''alter table user add unique(name);
alter table user modify name varchar(20) unique;
'''刪除唯一主鍵
'''alter table user drop index name;
'''
建表時新增預設約束
約束某個欄位的預設值
'''create table user2 (
id int,
name varchar(20),
age int default 10
);'''
移除預設約束
'''alter table user modify age int
'''
'''
班級'''
create table classes (
id int primary key,
name varchar(20)
);'''
學生表這裡的 class_id 要和 classes 中的 id 字段相關聯
class_id 的值必須來自於 classes 中的 id 字段值
'''create table students (
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);'''
1、主表(父表)classes 中沒有的資料值,在副表(子表)students 中,是不可以使用的;
2、主表中的記錄被副表引用時,主表不可以被刪除。
'''
只要字段值還可以繼續拆分,就不滿足第一正規化。
正規化涉及得越詳細,對某些實際操作可能會更好,但並非都有好處,需要對專案實際情況進行設定。
在滿足第一正規化的前提下,其他列都必須完全依賴於主鍵列。如果出現不完全依賴,只可能發生在聯合主鍵的情況下:
#訂單表
create table myorder (
product_id int,
customer_id int,
product_name varchar(20),
customer_name varchar(20),
primary key (product_id, customer_id)
);
實際上,在這張訂單表中,product_name
只依賴於product_id
,customer_name
只依賴於customer_id
。也就是說,product_name
和customer_id
是沒用關係的,customer_name
和product_id
也是沒有關係的。這就不滿足第二正規化:其他列都必須完全依賴於主鍵列!如下拆分之後,myorder
表中的product_id
和customer_id
完全依賴於order_id
主鍵,而product
和customer
表中的其他欄位又完全依賴於主鍵,滿足了第二正規化的設計。
create table myorder (
order_id int primary key,
product_id int,
customer_id int
);create table product (
id int primary key,
name varchar(20)
);create table customer (
id int primary key,
name varchar(20)
);
在滿足第二正規化的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關係。
create table myorder (
order_id int primary key,
product_id int,
customer_id int,
customer_phone varchar(15)
);
表中的customer_phone
有可能依賴於order_id
、customer_id
兩列,也就不滿足了第三正規化的設計:其他列之間不能有傳遞依賴關係。如下修改後就不存在其他列之間的傳遞依賴關係,其他列都只依賴於主鍵列,滿足了第三正規化的設計!
create table myorder (
order_id int primary key,
product_id int,
customer_id int
);create table customer (
id int primary key,
name varchar(20),
phone varchar(15)
);
MySQL學習筆記(1)
第一章 mysql架構 客戶連線及認證,在伺服器擁有自己的執行緒,每個連線所屬的查詢都會在指定的某個單獨執行緒中完成 認證方式 基於使用者名稱 原始主機資訊和口令。對查詢請求,首先查詢快取,若不存在則對查詢進行解析,建立解析樹,對其進行優化 優化器 優化器不關心儲存引擎的差異,但儲存引擎可能對查詢優...
MySQL學習筆記1
前言 部落格裡更新的mysql知識多為總結常用方法方式,不保證嚴格的學術性。一.mysql 簡介 mysql是乙個小型關係型資料庫管理系統 二.mysql進入方法 1 直接開啟安裝好的mysql軟體,輸入密碼即可 2 在cmd中進入 轉到 mysql的安裝目錄中的 bin 目錄 輸入 mysql u...
mysql學習筆記(1)
1.官網 1.2 安裝 2.使用xampp for windows 2.1 官網 2.2 重新編譯版 二 資料庫基本指令 1.資料庫操作 1.1 關閉資料庫 net stop mysql 1.2 開啟資料庫 net start mysql 1.3 登入mysql 將本次使用記錄儲存到c mysql....