MySQL操作
一、数据库操作
操作名 | 指令 | 备注 |
---|---|---|
登录数据库 | sudo mysql -uroot | |
创建数据库 | CREATE DATABASE dbname | dbname是自定义名字 |
查看当前服务器所有数据库 | SHOW DATABASES | |
使用数据库 | USE dbname | dbname是自定义名字 |
删除数据库 | DROP DATABASE databasename | dbname是自定义名字 |
修改数据库名 | ALTER DATABASE dbname | dbname是自定义名字 |
二、数据操作
操作名 | 指令 | 备注 |
---|---|---|
插入数据 | INSERT INTO tablename VALUES( … ) | table是表名,values里面是插入一行的值 |
删除数据 | DELETE FROM tbname WHERE 条件表达式 | |
修改数据 | UPDATA tbname SET 字段=值 WHERE 条件 | |
查询数据 | SELECT name FROM tbname |
三、MySQL建表约束
1、主键约束:primary key
它能够唯一确定一张表中的一条记录,我们通过给某个字段添加约束,就可以是的该字段不重复且不为空。
演示如下:
mysql> CREATE TABLE test1( id int primary key,
-> name varchar(20) ); #建立带约束的数据表
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO test1 VALUES(1,'张三');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO test1 VALUES(1,'张三'); #主键重复,不可插入
ERROR 1062 (23000): Duplicate entry '1' for key 'test1.PRIMARY'
mysql> INSERT INTO test1 VALUES(1,'李四'); #只看主键
ERROR 1062 (23000): Duplicate entry '1' for key 'test1.PRIMARY'
mysql> INSERT INTO test1 VALUES(2,'张三'); #修改主键,插入成功
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test1;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 张三 |
+----+--------+
2 rows in set (0.00 sec)
mysql> INSERT INTO test1 VALUES(NULL,'李四'); #不重复且不为空
ERROR 1048 (23000): Column 'id' cannot be null
##联合主键:两个字段都进行约束
##联合主键任一个不可为空
mysql> CREATE TABLE test2(
-> id int,
-> name varchar(20),
-> password varchar(20),
-> primary key(id,name))
-> ;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO test2 VALUES(1,'张三','123');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test2 VALUES(1,'张三','123'); #联合主键重复
ERROR 1062 (23000): Duplicate entry '1-张三' for key 'test2.PRIMARY'
mysql> INSERT INTO test2 VALUES(2,'张三','123'); #联合主键不重复
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test2 VALUES(1,'李四','123'); #联合主键不重复
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test2; #检测
+----+--------+----------+
| id | name | password |
+----+--------+----------+
| 1 | 张三 | 123 |
| 1 | 李四 | 123 |
| 2 | 张三 | 123 |
+----+--------+----------+
3 rows in set (0.00 sec)
2、自增约束:auto_increment
mysql> CREATE TABLE test3( id int primary key auto_increment, name varchar(20) ); #建立自增约束主键
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO test3 (name) VALUES('张三'); #第一个只插入name
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test3 VALUES(NULL,'张三'); #主键可以为null
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test3;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 张三 |
+----+--------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE test4(
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> desc test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> alter table test4 add primary key(id); #添加外键约束
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test4; #此时就有主键约束了
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO test4 VALUES(1,'张三');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test4 VALUES(1,'张三');
ERROR 1062 (23000): Duplicate entry '1' for key 'test4.PRIMARY'
mysql> INSERT INTO test4 VALUES(2,'张三');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM test4;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 张三 |
+----+--------+
2 rows in set (0.00 sec)
## 删除约束:alter table 表名 drop primary key
mysql> alter table test4 drop primary key;
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
## 通过 modify 修改字段,添加约束
mysql> alter table test4 modify id int primary key;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
3、唯一约束:unique
唯一约束修饰的字段值不可以重复
mysql> CREATE table test5(
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> alter table test5 add unique(name); #通过alter 添加唯一约束
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test5;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO test5 VALUES(1,'张三');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test5 VALUES(1,'张三'); #约束重复了
ERROR 1062 (23000): Duplicate entry '张三' for key 'test5.name'
mysql> INSERT INTO test5 VALUES(1,'李四'); #
Query OK, 1 row affected (0.01 sec)
##另一种unique约束建表方法
CREATE TABLE test5(
id int,
name varchar(20),
unique(name) #同样可以 unique(id,name) 组合约束只要有一个不重复就不重复
);
##删除 unique 约束
mysql> ALTER TABLE test5 DROP INDEX name;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC test5
-> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
## modify 添加 unique约束
mysql> ALTER TABLE test5 MODIFY name varchar(20) unique;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC test5;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
总结:
1、建表添加约束
2、使用alter add
3、alter modify
4、 删除 alter drop
4、非空约束
修饰字段不能为null
mysql> create table test6(id int , name varchar(20) not null);
Query OK, 0 rows affected (0.01 sec)
mysql> desc test6;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | | #区别在于yes和no
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
5、默认约束
当我们插入字段值的时候,如果没有传值,就会使用默认值
mysql> ALTER TABLE test6 MODIFY id int default 0; ##设置默认约束
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test6;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | 0 | |
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO test6 (name) VALUES('李四'); #只插入name字段,会自动设置id为默认值
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM test6;
+------+--------+
| id | name |
+------+--------+
| NULL | 李四 |
| 0 | 李四 |
+------+--------+
2 rows in set (0.00 sec)
6、外键约束
父表、子表
mysql> create table class(
-> id int primary key,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> create table student2( id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references class(id) );
Query OK, 0 rows affected (0.02 sec)