<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
在資料庫中,資料表是資料庫中最重要、最基本的操作物件,是資料儲存的基本單位。資料表被定義為列的集合,資料在表中是按照行和列的格式來儲存的。每一行代表一條唯一的記錄,每一列代表記錄中的一個域。
建立資料表必須是在已經有資料庫的前提下的哈,首先需要切換到資料庫中,使用use
命令進行切換。
mysql> use yunweijia; Database changed mysql>
create table <表名> (
欄位1,資料型別 [列級別約束條件] [預設值],
欄位2,資料型別 [列級別約束條件] [預設值],
欄位3,資料型別 [列級別約束條件] [預設值],
------
[表級別約束條件]
)
例如我們建立一個表結構如下:
欄位名稱 | 資料型別 | 備註 |
id | INT | 員工編號 |
name | VARCHAR(25) | 員工名稱 |
deptid | INT | 所在部門編號 |
money | FLOAT | 工資 |
mysql> create database test_db; Query OK, 1 row affected (0.02 sec) mysql>
mysql> use test_db; Database changed mysql>
mysql> CREATE TABLE `test_user` ( -> `id` int(0) NULL DEFAULT NULL COMMENT '員工編號', -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '員工姓名', -> `deptid` int(0) NULL DEFAULT NULL COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>
mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | test_user | +-------------------+ 1 row in set (0.00 sec) mysql> desc test_user; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(25) | YES | | NULL | | | deptid | int | YES | | NULL | | | money | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql>
釋義:
desc
命令是檢視mysql
表結構的命令;
主鍵,又稱主碼,是表中一列或多列的組合。主鍵約束(Primary KeyConstraint
)要求主鍵列的資料唯一,並且不允許為空。主鍵能夠唯一地標識表中的一條記錄,可以結合外來鍵來定義不同資料表之間的關係,並且可以加快資料庫查詢的速度。主鍵和記錄之間的關係如同身份證和人之間的關係,它們之間是一一對應的。主鍵分為兩種型別:單欄位主鍵和多欄位聯合主鍵。
主鍵由一個欄位組成,SQL
語句格式分為以下兩種情況。
(1.1)在定義列的時候指定主鍵
語法:
欄位名 資料型別 PRIMARY KEY [預設值]
範例:
mysql> CREATE TABLE `test_user_2` ( -> `id` int(0) PRIMARY KEY COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '員工姓名', -> `deptid` int(0) NULL DEFAULT NULL COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>
看下結果:
mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | test_user | | test_user_2 | +-------------------+ 2 rows in set (0.00 sec) mysql> desc test_user_2; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptid | int | YES | | NULL | | | money | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql>
(1.2)在定義完所有列之後指定主鍵;
語法:
[CONSTRAINT <約束名>] PRIMARY KEY [欄位名]範例:
mysql> CREATE TABLE `test_user_3` ( -> `id` int(0) COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '員工姓名', -> `deptid` int(0) NULL DEFAULT NULL COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資', -> PRIMARY KEY(id) -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>
看下結果:
mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | test_user | | test_user_2 | | test_user_3 | +-------------------+ 3 rows in set (0.00 sec) mysql> desc test_user_3; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptid | int | YES | | NULL | | | money | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql>
主鍵由多個欄位聯合組成,語法規則如下:
PRIMARY KEY [欄位1, 欄位2, ...,欄位n]
範例:
mysql> CREATE TABLE `test_user_4` ( -> `id` int(0) COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資', -> PRIMARY KEY(name, deptid) -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>
看下結果:
mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | test_user | | test_user_2 | | test_user_3 | | test_user_4 | +-------------------+ 4 rows in set (0.00 sec) mysql> desc test_user_4; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(25) | NO | PRI | NULL | | | deptid | int | NO | PRI | NULL | | | money | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql>
語句執行後,便建立了一個名為test_user_4
的資料表,name
欄位和deptid
欄位組合在一起成為test_user_4
的多欄位聯合主鍵。
外來鍵用來在兩個表的資料之間建立連線,可以是一列或者多列。一個表可以有一個或多個外來鍵。外來鍵對應的是參照完整性,一個表的外來鍵可以是空值,若不為空值,則每一個外來鍵值必須等於另一個表中主鍵的某個值。
外來鍵:首先他是表中的一個欄位,雖可以不是本表的主鍵,但要對應另外一個表的主鍵。外來鍵的主要作用是保證資料參照的完整性,定義外來鍵後,不允許刪除在另一個表中具有關聯關係的行。外來鍵的作用是保持資料的一致性、完整性。
語法:
[CONSTRAINT <外來鍵名>] FOREIGN KEY 欄位名1 [ ,欄位名2,…]
REFERENCES <主表名> 主鍵列1 [ ,主鍵列2,…]
外來鍵名為定義的外來鍵約束的名稱,一個表中不能有相同名稱的外來鍵;
欄位名表示子表需要新增外來鍵約束的欄位列;
主表名即被字表外來鍵所依賴的表的名稱;
主鍵列表示主表中定義的主鍵列,或者列組合。
例如我們新建一個
test_dept
的表,表結構如下:欄位名稱資料型別備註idINT部門編號nameVARCHAR(30)部門名稱locationVARCHAR(50)部門位置
首先我們建立一下這個表:
mysql> CREATE TABLE `test_dept` ( -> `id` int(0) PRIMARY KEY COMMENT '部門編號', -> `name` varchar(30) CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '部門名稱', -> `localhost` varchar(50) CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '部門位置' -> ); Query OK, 0 rows affected, 1 warning (0.03 sec) mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | test_dept | | test_user | | test_user_2 | | test_user_3 | | test_user_4 | +-------------------+ 5 rows in set (0.00 sec) mysql>
定義資料表test_user_5
,讓他的鍵deptid
作為外來鍵關聯到test_dept
中的主鍵id
,那麼我們的SQL
語句應該這麼寫;
mysql> CREATE TABLE `test_user_5` ( -> `id` int(0) PRIMARY KEY COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資', -> CONSTRAINT fk_user_dept FOREIGN KEY(deptid) REFERENCES test_dept(id) -> ); Query OK, 0 rows affected, 2 warnings (0.07 sec) mysql>
通過上面的語句,可以看到,我們建立了一個名為test_user_5
的表,主鍵為id
,且建立了一個名為fk_user_dapt
的外來鍵約束,外來鍵名稱為deptid
,其依賴於test_dept
表中的主鍵ID
。
注意點:
子表的外來鍵必須關聯父表的主鍵,且關聯欄位的資料型別必須匹配,如果型別不一樣,則建立子表時,就會出現錯誤
ERROR 1005 (HY000):Can't create table 'database.tablename'(errno: 150)
。
非空約束(Not Null Constraint
)指欄位的值不能為空。對於使用了非空約束的欄位,如果使用者在新增資料時沒有指定值,資料庫系統會報錯。
語法:
欄位名 資料型別 not null
那麼,我們根據上面的內容,再建立一個test_user_6
表,並指定name
不能為空;
mysql> CREATE TABLE `test_user_6` ( -> `id` int(0) PRIMARY KEY COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '員工姓名', -> `deptid` int(0) COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>
唯一性約束(Unique Constraint
)要求該列唯一,允許為空,但只能出現一個空值。唯一約束可以確保一列或者幾列不出現重複值。
語法:
欄位名 資料型別 UNIQUE
那麼,我們根據該內容,建立一個test_user_7
表,並指定id
唯一;
mysql> CREATE TABLE `test_user_7` ( -> `id` int(0) UNIQUE PRIMARY KEY COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) COMMENT '所在部門編號', -> `money` float NULL DEFAULT NULL COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.05 sec) mysql>
注意點:
UNIQUE
和PRIMARY KEY
的區別:一個表中可以有多個欄位宣告為UNIQUE
,但只能有一個PRIMARY KEY
宣告;宣告為PRIMARY KEY
的列不允許有空值,但是宣告為UNIQUE
的欄位允許空值(NULL
)的存在。
預設約束(Default Constraint
)指定某列的預設值。如男性同學較多,性別就可以預設為"男"。如果插入一條新的記錄時沒有為這個欄位賦值,那麼系統會自動為這個欄位賦值為"男"。
語法:
欄位名 資料型別 DEFAULT 預設值
那我們在這個基礎上,再新建一個test_user_8
表,並指定預設所在部門編號為0001
,那麼建立的時候就應該這麼寫;
mysql> CREATE TABLE `test_user_8` ( -> `id` int(0) COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) DEFAULT 0001 COMMENT '所在部門編號', -> `money` float COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql>
在資料庫應用中,經常希望在每次插入新記錄時,系統自動生成欄位的主鍵值。
可以通過為表主鍵新增AUTO_INCREMENT
關鍵字來實現。
預設的,在MySQL
中AUTO_INCREMENT
的初始值是1
,每新增一條記錄,欄位值自動加1
。一個表只能有一個欄位使用AUTO_INCREMENT
約束,且該欄位必須為主鍵的一部分。AUTO_INCREMENT
約束的欄位可以是任何整數型別(TINYINT、SMALLIN、INT、BIGINT
等)。
語法:
欄位名 資料型別 AUTO_INCREMENT
例如我們這裡建立一個test_user_9
表,並執行員工編號自動遞增,那麼我們應該這麼寫:
mysql> CREATE TABLE `test_user_9` ( -> `id` int(0) PRIMARY KEY AUTO_INCREMENT COMMENT '員工編號' , -> `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '員工姓名', -> `deptid` int(0) DEFAULT 0001 COMMENT '所在部門編號', -> `money` float COMMENT '工資' -> ); Query OK, 0 rows affected, 2 warnings (0.04 sec) mysql>
我們在這個表裡插入兩條資料試試看;
mysql> insert into test_user_9 (name, deptid, money) value ('張三', '0001', '10000'), ('李四', '0001', '10000'), ('王五', '0001', '10000'); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from test_user_9; +----+--------+--------+-------+ | id | name | deptid | money | +----+--------+--------+-------+ | 1 | 張三 | 1 | 10000 | | 2 | 李四 | 1 | 10000 | | 3 | 王五 | 1 | 10000 | +----+--------+--------+-------+ 3 rows in set (0.00 sec) mysql>
可以看到id
確實遞增了哈。
到此這篇關於mysql主鍵,外來鍵,非空,唯一,預設約束及建立表的方法的文章就介紹到這了,更多相關mysql主鍵,外來鍵 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45