DDL
上一节 链接: 数据库学习1-操作数据库表
一、操作表
mysql> use abc001; -- 使用一个数据库
Database changed
mysql> select database(); -- 查案当前数据库
+------------+
| database() |
+------------+
| abc001 |
+------------+
1 row in set (0.00 sec)
mysql> show tables; -- 查看表 默认一个新的数据库下面的表是空的
Empty set (0.00 sec)
mysql> create table student(id int,name varchar(37),age int); -- 创建一个表
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; -- 查看表
+------------------+
| Tables_in_abc0
+------------------+
| student |
+------------------+
2 rows in set (0.00 s
mysql> desc student; -- 查看列
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(37) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
1.C(Create):创建
- 语法;
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);-- 在创建一个数据表的时候,必须加上列名和数据类型,不然会报错;
create table stu6(id int(100) PRIMARY key,name VARCHAR(255)); 创建带有主键的表;
- 注意:最后一列,不需要加逗号(,)
数据类型:
1.int:整数类型
age int,-- 用的最多的 默认字符是11个,可以自己手动添加 age int(99); 最大 255
2.double:小数类型
score duoble(7,3) -- 前面大于等于后面
ERROR 1427 (42000): For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'score').
3.date:日期
只包含年月日,yyyy-MM-dd
4.datatime:日期
包含年月日时分秒 ,yyyy-MM-dd HH:mm;ss
5.timestamp:时间类型
包含年月日时分秒 yyyy-MM-dd HH:mm;ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6.varchar:字符串
name varchar(20):姓名最大20的字符 -- varchar后必须定义字符长度,不然会报错
cainiao 7个字符 张三 2个字符
char
- 创建表
create table student(
id int,
name varchar(37),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
create table student(id int(99),name varchar(37),score double(4,1),birthday date,insert_time timestamp);
- 复制表:
create table 表名 like 被复制的表名
mysql> create table abc004 like abc; -- like 复制表,会把表中的数据完整复制下来;
Query OK, 0 rows affected (0.15 sec)
mysql> show tables;
+------------------+
| Tables_in_abc001 |
+------------------+
| ab001 |
| abc |
| abc004 |
+------------------+
3 rows in set (0.00 sec)
2.R(Retrieve):查询
(1) 查询某个数据库中所有的表名称
show tables; -- 查询表
(2)查询表结构
desc 表名;-- 查询表中的列结构
3.U(Update):修改
(1).修改表名
alter table 表名 rename to 新的表名;
mysql> alter table abc rename to abc002; -- 修改表名
Query OK, 0 rows affected (0.12 sec)
mysql> show tables;
+------------------+
| Tables_in_abc001 |
+------------------+
| ab001 |
| abc002 |
| abc004 |
+------------------+
3 rows in set (0.00 sec)
(2).修改表的字符集
alter table 表名 character set 字符集名称;
4.D(Delete):删除
drop table 表名;
drop table if exists 表名;//先判断再删除
mysql> drop table abc002; -- drop 删除表
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+------------------+
| Tables_in_abc001 |
+------------------+
| ab001 |
| abc004 |
+------------------+
2 rows in set (0.00 sec)
二、修改列
1.添加一列
alter table 表名 add 列名 数据类型;
mysql> alter table abc01 add l varchar(49); -- 在表中新添加一列;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
2.修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
mysql> alter table abc01 change name name varchar(99); -- 这里使用change修改列的数据类型,列名可以和新列名相同
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table abc01 modify password varchar(89); -- 使用modify去修改列名;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc abc01;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(99) | YES | | NULL | |
| password | varchar(89) | YES | | NULL | |
| l | varchar(49) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
3.删除列
alter table 表名 drop 列名;
mysql> alter table abc01 drop id; -- 删除表中的一列数据
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
desc stu; -- 查看列信息
4.查看列
desc stu -- 查看列