mysql基本操作(一):数据库、建表约束

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)



猜你喜欢

转载自blog.csdn.net/green_healthy/article/details/121128821