å屿§ï¼åæ®µå±æ§ï¼
6ä¸ªå±æ§ï¼
nullãé»è®¤å¼ãåæè¿°ã主é®ãå¯ä¸é®ãèªå¨å¢é¿
1ãnull
ä»£è¡¨åæ®µä¸ºç©º
注æï¼
- å¨è®¾è®¡è¡¨çæ¶åï¼å°½éä¸è¦è®©æ°æ®ä¸ºç©º
- MySQLçè®°å½é¿åº¦ä¸º65535个åèï¼å¦æä¸ä¸ªè¡¨ä¸æå段å 许为null, é£ä¹ç³»ç»å°±ä¼è®¾è®¡ä¿çä¸ä¸ªåèæ¥åå¨null,æç»ææåå¨é¿åº¦ä¸º65534个åè
2ãé»è®¤å¼default
ç¨æ·ä¸è®¾ç½®æ°æ®çæ¶åï¼é»è®¤èµå¼
create table my_default(
name varchar(10) not null,
age int default 18
);
mysql> desc my_default;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | NO | | NULL | |
| age | int(11) | YES | | 18 | |
+-------+-------------+------+-----+---------+-------+
-- æå
¥æ°æ®ï¼æªè®¾ç½®çå¼ä¼ä½¿ç¨é»è®¤å¼
insert into my_default (name) values('Tom');
mysql> select * from my_default;
+------+------+
| name | age |
+------+------+
| Tom | 18 |
+------+------+
-- æ¾ç¤ºåç¥ï¼ä½¿ç¨é»è®¤å¼
insert into my_default values('Tom', default);
mysql> select * from my_default;
+------+------+
| name | age |
+------+------+
| Tom | 18 |
| Tom | 18 |
+------+------+
3ãåæè¿°
comment 注é说æ
create table my_comment(
name varchar(10) not null comment 'å§åï¼ä¸è½ä¸ºç©º',
age int default 18 comment 'å¹´é¾ï¼é»è®¤18å²'
);
-- æ¥ç注é
show create table my_comment;
CREATE TABLE `my_comment` (
`name` varchar(10) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'å§åï¼ä¸è½ä¸ºç©º',
`age` int(11) DEFAULT '18' COMMENT 'å¹´é¾ï¼é»è®¤18å²'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
4ã主é®
primary key 主è¦çé®ï¼å¨ä¸å¼ 表ä¸ï¼æä¸åªæä¸ä¸ªå¼ï¼å ·æå¯ä¸æ§
主é®é»è®¤ä¸å 许为空
not null
4.1ãå建主é®
1ãé表å建
- æ¹æ¡1ï¼ç´æ¥å¨éè¦å½å主é®çåæ®µä¹åï¼å¢å
primary key
- æ¹æ¡2ï¼å¨ææå段ä¹åå¢å
primary key(åæ®µä¿¡æ¯)
create table my_primary_key_1(
username varchar(10) primary key
);
create table my_primary_key_2(
username varchar(10),
primary key(`username`)
);
2ã表åå¢å
åºæ¬è¯æ³
alter table 表å add primary key(åæ®µå);
示ä¾
create table my_primary_key_3(
username varchar(10)
);
alter table my_primary_key_3 add primary key(username);
4.2ãæ¥ç主é®
-- æ¹æ¡ä¸ï¼æ¥çè¡¨ç»æ
desc my_primary_key_1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(10) | NO | PRI | NULL | |
+----------+-------------+------+-----+---------+-------+
-- æ¹æ¡äºï¼æ¥çå建è¯å¥
show create table my_primary_key_2;
CREATE TABLE `my_primary_key_2` (
`username` varchar(10) COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
4.3ãå é¤ä¸»é®
alter table 表å drop primary key;
示ä¾
alter table my_primary_key_1 drop primary key;
mysql> desc my_primary_key_1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(10) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
4.4ãå¤å主é®
æ¡ä¾ï¼ä¸å¼ å¦çé修课表
- ä¸ä¸ªå¦çå¯ä»¥éä¿®å¤ä¸ªé修课
- ä¸ä¸ªé修课ä¹å¯ä»¥ç±å¤ä¸ªå¦çæ¥é
- ä¸ä¸ªå¦çå¨ä¸ä¸ªé修课ä¸åªæä¸ä¸ªæç»©
-- æ·»å å¤å主é®
create table my_score(
student_no char(10),
course_no char(10),
score tinyint not null,
primary key(student_no, course_no)
);
desc my_score;
+------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| student_no | char(10) | NO | PRI | NULL | |
| course_no | char(10) | NO | PRI | NULL | |
| score | tinyint(4) | NO | | NULL | |
+------------+------------+------+-----+---------+-------+
4.5ã主é®çº¦æ
- å½ååæ®µå¯¹åºçæ°æ®ä¸è½ä¸ºç©º
- å½ååæ®µå¯¹åºçæ°æ®ä¸è½æä»»ä½éå¤
-- ç¬¬ä¸æ¬¡å¯ä»¥æåæå
¥
mysql> insert into my_primary_key_2 (username) values('Tom');
Query OK, 1 row affected (0.00 sec)
-- ç¬¬äºæ¬¡æå
¥å¤±è´¥
mysql> insert into my_primary_key_2 (username) values('Tom');
ERROR 1062 (23000): Duplicate entry 'Tom' for key 'PRIMARY'
mysql> select * from my_primary_key_2;
+----------+
| username |
+----------+
| Tom |
+----------+
4.6ã主é®åç±»
- ä¸å¡ä¸»é®: å¦çIDï¼è¯¾ç¨ID
- é»è¾ä¸»é®: èªç¶å¢é¿çæ´åï¼åºç¨å¹¿æ³ï¼
5ãèªå¨å¢é¿
auto_increment å¦ææ²¡ææä¾è¯¥å段çå¼ï¼ç³»ç»ä¼æ ¹æ®ä¹ååå¨çæ°æ®è¿è¡èªå¨å¢é¿
é常ç¨äºé»è¾ä¸»é®
5.1ãèªå¨å¢é¿çåç
- ç³»ç»ä¿åå½åèªå¨å¢é¿å段ï¼è®°å½å½å对åºçæ°æ®å¼ï¼å¨ç»å®ä¸ä¸ªæå®çæ¥é¿
- å½ç¨æ·è¿è¡æ°æ®æå ¥æ¶ï¼å¦ææ²¡æç»å¼ï¼ç³»ç»å¨åå§å¼ä¸å 䏿¥é¿åææ°çæ°æ®
- èªå¨å¢é¿ç触åï¼ç»å®å±æ§çåæ®µæ²¡ææä¾å¼
- èªå¨å¢é¿åªéç¨äºæ°å¼
5.2ã使ç¨èªå¨å¢é¿
åºæ¬è¯æ³
åæ®µ auto_increment
create table my_auto(
id int primary key auto_increment,
name varchar(10) not null comment 'ç¨æ·å',
password varchar(50) not null comment 'å¯ç '
);
mysql> desc my_auto;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| password | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
insert into my_auto(name, password) values('Tom', '123456');
mysql> select * from my_auto;
+----+------+----------+
| id | name | password |
+----+------+----------+
| 1 | Tom | 123456 |
+----+------+----------+
5.3ãä¿®æ¹èªå¨å¢é¿
show create table my_auto;
CREATE TABLE `my_auto` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ç¨æ·å',
`password` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'å¯ç ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
-- ä¿®æ¹auto_increment
alter table my_auto auto_increment=10;
show create table my_auto;
CREATE TABLE `my_auto` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ç¨æ·å',
`password` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'å¯ç ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
5.4ãå é¤èªå¨å¢é¿
éè¿ä¿®æ¹åæ®µå±æ§ï¼å»æauto_increment
alter table my_auto modify id int;
show create table my_auto;
CREATE TABLE `my_auto` (
`id` int(11) NOT NULL,
`name` varchar(10) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ç¨æ·å',
`password` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'å¯ç ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
5.5ãåå§è®¾ç½®
show variables like 'auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
- auto_increment_increment æ¥é¿
- auto_increment_offset åå§å¼
5.6ãç»èé®é¢
- ä¸å¼ è¡¨åªæä¸ä¸ªèªå¢é¿ï¼èªå¢é¿å±äºè¡¨é项
- æå¨ä¿®æ¹è¡¨ççèªå¢é¿å¼ï¼è¦æ¯åææ°æ®å¤§
-- æå®idå¼, auto_incrementä¼èªå¨å¢é¿
insert into my_auto(id, name, password) values(10, 'Tom', '123456');
mysql> select * from my_auto;
+----+------+----------+
| id | name | password |
+----+------+----------+
| 1 | Tom | 123456 |
| 10 | Tom | 123456 |
+----+------+----------+
6ãå¯ä¸é®
unique key
å¯ä»¥æå¤ä¸ªï¼
å è®¸æ°æ®ä¸ºnull, å¯ä»¥æå¤ä¸ªnullï¼nullä¸å䏿¯è¾
6.1ãå建å¯ä¸é®
å主é®ç±»ä¼¼
- ç´æ¥å¨è¡¨å段åå¢å å¯ä¸é®æ è¯
unique [key]
- ææå段ä¹å使ç¨
unique key(åæ®µå表)
- å建å®è¡¨ä¹åä¹å¯ä»¥å¢å å¯ä¸é®
alter table 表å add unique key(åæ®µ)
-- æ¹å¼ä¸ï¼
create table my_unique1(
id int primary key auto_increment,
username varchar(10) unique
);
-- æ¹å¼äºï¼
create table my_unique2(
id int primary key auto_increment,
username varchar(10),
unique key(username)
);
-- æ¹å¼ä¸ï¼
create table my_unique3(
id int primary key auto_increment,
username varchar(10)
);
alter table my_unique3 add unique key(username);
6.2ãæ¥çå¯ä¸é®
mysql> desc my_unique1;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(10) | YES | UNI | NULL | |
+----------+-------------+------+-----+---------+----------------+
ä¸ä¸ºç©ºnullçæ¶åï¼ä¸å 许éå¤
-- å¯ä»¥æå
¥å¤ä¸ªnull
insert into my_unique1 (username) values(null);
insert into my_unique1 (username) values(null);
-- ä¸ä¸ºnullæ¶ï¼ä¸å
许éå¤
insert into my_unique1 (username) values('Tom');
insert into my_unique1 (username) values('Tom');
ERROR 1062 (23000): Duplicate entry 'Tom' for key 'username'
6.3ãå é¤å¯ä¸é®
alter table 表å drop index å¯ä¸é®åå;
alter table my_unique2 drop index username;
mysql> desc my_unique2;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+