1. 程式人生 > 其它 >2.基礎知識(建立表、增刪改差、約束、ddl語句)

2.基礎知識(建立表、增刪改差、約束、ddl語句)

程式碼練習:

#選擇到star資料庫
USE star;
#建立一個student表
CREATE TABLE student(
    #定義id為int型別並設定主鍵
    id INT PRIMARY KEY,
    #定義name為varchar型別,位數為50,不能為空】
    NAME VARCHAR(50) NOT NULL,
    #定義age為int型別,位數為3
    age INT(3),
    #定義address為varchar型別,位數100
    address VARCHAR(100),
    #定義birth為datetime型別
    birth DATETIME
)#設定儲存引擎,設定編碼格式 ENGINE=INNODB DEFAULT CHARSET=utf8; #查詢一個剛才建立的表 select * from 表名; SELECT * FROM student; #修改表名 rename table 表名 to 修改的表名; RENAME TABLE student TO sys_student; #查詢修改後的表名看修改成功沒 SELECT * FROM sys_student;#修改成功 #alter:對已經建立的表進行新增、修改、刪除、約束操作 #增加列 語法:alter table 表名 add 列名 資料型別;
ALTER TABLE sys_student ADD sex CHAR(2); #修改列 語法:alter table 表名 modify 要修改的列名 修改的資料型別; ALTER TABLE sys_student MODIFY address VARCHAR(150) NOT NULL; #刪除列 語法:alter table 表名 drop 要刪除的列名 ALTER TABLE sys_student DROP sex; #查詢下表看刪除了沒有 SELECT * FROM sys_student;#sex列已經被刪除了 SELECT * FROM employees; #建立員工表,並新增外來鍵約束
CREATE TABLE employees( employee_id INT, first_name VARCHAR(50), job_id VARCHAR(50) NOT NULL, #定義一個salary,型別為double salary DOUBLE, dept_id INT, /* 約束英文:constraint 約束實際上就是表中資料的限制條件 表級約束可以給約束起名字(方便以後通過這個名字來刪除這個約束) 在定義完所有列之後指定主鍵,語法:constraint 約束的名字 約束型別 (作用列名)*/ #emp_id_pk是約束名字,employee_id是約束的列,primary key:主鍵約束 CONSTRAINT emp_id_pk PRIMARY KEY(employee_id), /*MySQL提供了另一種稱為UNIQUE索引的索引,它允許您在一個或多個列中強制實現值的唯一性。與PRIMARY KEY索引不同,每個表可以有多個UNIQUE索引。 */ #給first_name列約束值唯一 CONSTRAINT emp_first_name_uk UNIQUE(first_name), /*CHECK <表示式> “表示式”指的就是 SQL 表示式,用於指定需要檢查的限定條件。 注意:若將CHECK約束子句置於所有列的定義以及主鍵約束和外來鍵定義之後,則這種約束也稱為基於表的 CHECK 約束。該約束可以同時對錶中多個列設定限定條件。*/ #給salary約束值不能為負數 CONSTRAINT emp_salary_min CHECK(salary>0), /*REFERENCES物件許可權。 建立外來鍵關係許可權。 使用者要在tb1上建立外來鍵,外來鍵指向tb2,那麼該使用者必須在tb2上有REFERENCES許可權。 外來鍵首先是表中的一個欄位,它可以不是本表的主鍵 但對應另外一個表的主鍵! 主表與從表:若同一個資料庫中,b表的外來鍵與a表的主鍵相對應,則a表為主表,b表為從表 */ #建立外來鍵的語法: [constraint<外來鍵名>] FOREIGN KEY 欄位1[,欄位名2,...] #references<主鍵名> 主鍵列1[,主鍵列2,...] #外來鍵名 為定義外來鍵約束的名稱;欄位名 表示子表需要新增外來鍵約束的子段列 #給dept_id列新增外來鍵並和主鍵建立關係,用references建立 CONSTRAINT emp_dept_fk FOREIGN KEY (dept_id)REFERENCES department(dept_id) ) #建立主表 CREATE TABLE department( dept_id INT, dept_name VARCHAR(50), #在定義完所有列之後指定主鍵,語法:[constraint<約束名>] primary key[欄位名] CONSTRAINT dept_name_uk PRIMARY KEY(dept_id), #用給(約束)給dept_name列約束唯一(UNIQUE) CONSTRAINT dept_name_uk UNIQUE(dept_name) ) SELECT *FROM employees; SELECT * FROM department; #delete刪除 where條件 語法:delete from 表名 where 條件 #從employees表中刪除employee_id 為1的行 DELETE FROM employees WHERE employee_id=1; DELETE FROM employees WHERE salary; #alter:對已經建立的表進行新增(add)、修改(modify)、刪除(drop)、約束操作 SELECT * FROM employees; #增加一個salary列,型別double ALTER TABLE employees ADD salary DOUBLE; #刪除empoyees下的salary列 ALTER TABLE employees DROP salary; #修改salary列型別為int not null ALTER TABLE employees MODIFY salary INT NOT NULL; #在department表裡新增dept_count列並設定型別為int ALTER TABLE department ADD dept_count INT; #新增約束: ALTER TABLE <表名> ADD <列定義>|<完整性約束>。 #由於使用此方式中 增加的新列 自動填充null值,所以不能為增加的新列指定not null約束。 #約束唯一 constraint 約束名 約束(欄位名) ALTER TABLE department ADD CONSTRAINT dept_count_uk UNIQUE(dept_count); #新增外來鍵為department表裡的欄位,並和department裡的主鍵(dept_id)建立聯絡 ALTER TABLE employees ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dept_id)REFERENCES department(dept_id); SELECT #刪除外來鍵約束名 ALTER TABLE employees DROP FOREIGN KEY emp_dept_fk; #刪除外來鍵約束列 ALTER TABLE employees DROP dept_id; SHOW CREATE TABLE employees;#show create table 表名:查看錶的詳細資訊, SHOW CREATE TABLE department; #以表格形式展現結構:DESCRIBE <表名>; DESCRIBE department; DESCRIBE employees; #查詢約束:SELECT * FROM information_schema.`TABLE_CONSTRAINTS`;(可以通過where table_name=‘student‘來約定只查詢某個表的約束) #其實每次新增約束都是將新增的約束的資訊儲存到了information_schema這個schema的table_constraints表裡;(mysql裡``和bash的很像,也是執行``內的表示式而不是將裡面作為字串使用) #查詢定義約束的列 SELECT * FROM information_schema.`TABLE_CONSTRAINTS` WHERE TABLE_NAME='employees'; #查詢定義約束的列 SELECT COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'EMPLOYEES';
程式設計師用一句“helloworld”賦予了計算機真正的生命,那他呢?在什麼時候,誰賦予了他真正的生命? 在某種意義上,他並不算一個有生命的人——他從未想過自己會喜歡什麼東西,或什麼人,他知道自己該有怎樣晦暗的命運和孤獨的一生,直到遇見一個人。 可即使如此,他的性格中也毫無溫存這一成分,他並非溫良和善之徒。他想和他抵死糾纏相互折磨,想將他死死禁錮,也想拉扯他下落沉淪,一起墮入萬丈深淵。 但他不會。 helloworld。 你熱愛世界。 我熱愛你。