mysql入门_数据库管理
表的创建、增加、修改、删除
创建表
语法:create table table_name (column_name column_type,...)
其中column_type是表字段的类型,mysql中表字段详细内容可以参照官方文档,这个是网上随便搜的其他童鞋的链接mysql 数据类型 - keme - 博客园 (cnblogs.com)
建表示例:
mysql> create table person_tmp1 (high float(5,2), name varchar(20), birthday date, other text);
Query OK, 0 rows affected (0.01 sec)
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| other | text | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
维护表:
因为生产需要对表结构的修改都可以定义为维护表,下面是几种常见维护场景以及对应语法。
#表添加列
alter table person_tmp1 add (weight float(5,2));
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| other | text | YES | | NULL | |
| weight | float(5,2) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
#修改列的长度
mysql> alter table person_tmp1 modify name varchar(30);
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
#修改列名 不常用
mysql> alter table person_tmp1 change name NAME varchar(30);
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | YES | | NULL | |
| NAME | varchar(30) | YES | | NULL | |
#删除列 weight为删除的列名
mysql> alter table person_tmp1 drop weight;
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | YES | | NULL | |
| NAME | varchar(30) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| other | text | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
#修改表名 person_tmp1源表名,person_tmp2新表名
mysql> alter table person_tmp1 rename to person_tmp2;
#删除表 person_tmp2是需要删除表的表名
mysql> drop table person_tmp2;
mysql> desc person_tmp2;
ERROR 1146 (42S02): Table 'test.person_tmp2' doesn't exist
#清空表数据 实际是drop表后再创建一张空表,比逐行删除数据效率高
mysql> truncate table person_tmp1;
列约束:
列约束是指列除了类型限定外还有其它额外的限定条件,比如非空 默认值 主键等;一般推荐先创建无约束的表再逐个添加约束条件,而不是和建表语句写在一起。
下面是常见的约束示例
#非空约束 high float(5,2)是修改列的列名和类型
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | YES | | NULL | |
mysql> alter table person_tmp1 modify high float(5,2) not null;
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | NO | | NULL | |
#唯一性约束 person_tmp1是表名,test_unique是唯一性约束的名称,name, birthday是唯一性约束的列
mysql> alter table person_tmp1 add constraint test_unique unique (name, birthday);
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | NO | | NULL | |
| name | varchar(20) | YES | MUL | NULL | |
| birthday | date | YES | | NULL | |
| other | text | YES | | NULL | |
#主键约束 test_primary 是主键约束的名称,key(name)是在name这个列上建主键约束。 主键约束可以理解为,主键+唯一 约束
mysql> alter table person_tmp1 add constraint test_primary primary key(name);
mysql> desc person_tmp1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| high | float(5,2) | NO | | NULL | |
| name | varchar(20) | NO | PRI | NULL | |
#检查约束 指定列只能是某些固定值 person_tmp1表的sex列只能是“男”或者“女”
mysql> alter table person_tmp1 add constraint check_con check (sex in ("男", "女"));
#外键约束 表B的某一列数据只能是表A主键中已经存在的数据,存在外键关系的表删除时需要先删除子表B再删除主表A
mysql> create table for_m (id int primary key,name varchar(20));
Query OK, 0 rows affected (0.03 sec)
mysql> create table for_s (id int,score float(6, 2));
Query OK, 0 rows affected (0.01 sec)
mysql> desc for_m;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> desc for_s;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| score | float(6,2) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
#创建外键约束 for_s创建外键约束的表名,外键约束的名字,key(id)表示在for_s表的id字段建立外键约束, for_m(id)表示和表名为for_m的id列建立外键关系
mysql> alter table for_s add constraint for_con foreign key(id) references for_m(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc for_s;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(11) | YES | MUL | NULL | |
| score | float(6,2) | YES | | NULL | |
表记录的增删改查
#插入数据 指定部分列值或者指定所有列值
mysql> insert into for_m (id) values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into for_m values(2, "张三");
Query OK, 1 row affected (0.00 sec)
mysql> select * from for_m;
+----+--------+
| id | name |
+----+--------+
| 1 | NULL |
| 2 | 张三 |
+----+--------+
#删除数据 通过where限定删除哪些行
mysql> delete from for_m where id=2;
Query OK, 1 row affected (0.00 sec)
mysql> select * from for_m;
+----+------+
| id | name |
+----+------+
| 1 | NULL |
+----+------+
#修改数据
mysql> select * from for_m;
+----+--------+
| id | name |
+----+--------+
| 1 | NULL |
| 2 | 张三 |
+----+--------+
mysql> update for_m set name="李四" where id=2;
mysql> select * from for_m;
+----+--------+
| id | name |
+----+--------+
| 1 | NULL |
| 2 | 李四 |
+----+--------+
#清空表
mysql> select * from person_tmp1;
+--------+--------+----------+-------+------+
| high | name | birthday | other | sex |
+--------+--------+----------+-------+------+
| 163.00 | 张三 | NULL | NULL | NULL |
+--------+--------+----------+-------+------+
mysql> truncate table person_tmp1;
mysql> select * from person_tmp1;
Empty set (0.00 sec)
浙公网安备 33010602011771号