MySQL----主键(PRIMARY KEY)和自增(AUTO INCREMENT)

时间:2022-02-26 01:29:14

UNSIGNED------无符号,没有负数,从0开始
ZEROFILL-------零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
NOT NULL------非空约束,也就是插入值的时候这个字段必须要给值,值不能为空
DEFAULT------默认值,如果插入记录的时候没有给字段赋值,则使用默认值
PRIMARY KEY------主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,自动禁止为空
AUTO_INCREMENT------自动增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
UNIQUE KEY------唯一性,一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外
FOREIGN KEY------外键约束

-- 测试主键
CREATE TABLE test_primary_key(
    id INT UNSIGNED PRIMARY KEY,
    username VARCHAR(20)
);
INSERT test_primary_key(id,username) VALUES(1,‘NAME1);
INSERT test_primary_key(id,username) VALUES(1,‘name2);
INSERT test_primary_key(username) VALUES(‘name3);

CREATE TABLE test_primary_key1(
    id INT UNSIGNED KEY,
    username VARCHAR(20)
);

CREATE TABLE test_primary_key2(
    id INT UNSIGNED,
    username VARCHAR(20),
    PRIMARY KEY(id)
);

-- CREATE TABLE test_primary_key3(
--     id INT UNSIGNED PRIMARY KEY,
--     courseId INT UNSIGNED PRIMARY KEY,
--     username VARCHAR(20),
--     email VARCHAR(50)
-- );

-- 复合主键
CREATE TABLE test_primary_key3(
    id INT UNSIGNED,
    courseId VARCHAR(20),
    username VARCHAR(20),
    email VARCHAR(50),
    PRIMARY KEY(id,courseId)  ---<<---相当于通过id 和 courseId 都可以定位到要查询的记录
);
-- 1-a
INSERT test_primary_key3(id,courseId,username,email)
VALUES(1,1,xiaoming,[email protected]);

INSERT test_primary_key3(id,courseId,username,email)
VALUES(2,1,xiaohong,[email protected]);

INSERT test_primary_key3(id,courseId,username,email)
VALUES(3,1,张三,[email protected]);

INSERT test_primary_key3(id,courseId,username,email)
VALUES(4,1,李四,[email protected]);

-- 测试AUTO_INCREMENT

CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
-- id INT UNSIGNED KEY AUTO_INCREMENT 中有AUTO_INCREMENT时一定要有KEY, 否则会报错.

INSERT test_auto_increment(username) VALUES(A); INSERT test_auto_increment(username) VALUES(B); INSERT test_auto_increment(username) VALUES(C); INSERT test_auto_increment(id,username) VALUES(NULL,E); INSERT test_auto_increment(id,username) VALUES(DEFAULT,F);
INSERT test_auto_increment(id,username) VALUES(‘‘,‘M‘);--报错, 不能为‘‘;
INSERT test_auto_increment(id,username) VALUES(15,G);--此刻id从15开始编号

 

mysql> select * from test_primary_key3;
 ---- ---------- ---------- ------------- 
| id | courseId | username | email       |
 ---- ---------- ---------- ------------- 
|  1 | 1        | xiaoming | 8@qq.com    |
|  2 | 1        | ??       | 3946@qq.com |
|  4 | 1        | 李四     | 17@qq.com   |
 ---- ---------- ---------- ------------- 
3 rows in set (0.00 sec)

mysql> CREATE TABLE test_auto_increment(
    -> id INT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC test_auto_increment;
 ---------- ------------------ ------ ----- --------- ---------------- 
| Field    | Type             | Null | Key | Default | Extra          |
 ---------- ------------------ ------ ----- --------- ---------------- 
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | YES  |     | NULL    |                |
 ---------- ------------------ ------ ----- --------- ---------------- 
2 rows in set (0.01 sec)



INSERT test_auto_increment(username) VALUES(A);
INSERT test_auto_increment(username) VALUES(B);
INSERT test_auto_increment(username) VALUES(C);

INSERT test_auto_increment(id,username) VALUES(NULL,E);
INSERT test_auto_increment(id,username) VALUES(DEFAULT,F);
INSERT test_auto_increment(id,username) VALUES(15,G);

 

mysql> SELECT * FROM test_auto_increment;
---- ----------
| id | username |
---- ----------
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | E |
| 5 | F |
| 15 | G |
---- ----------
6 rows in set (0.00 sec)