【MySQL】表的相关操作

打印 上一主题 下一主题

主题 785|帖子 785|积分 2355

1. 表的创建

1.1 创建表语法

  1. create table student (
  2. 列属性名1 列数据类型,
  3. 列属性名2 列数据类型
  4. ) character set 字符集 collate 校验集 engine 存储引擎
复制代码
可以在最后指定字符集等,也可以不指定使用默认配置的
   也可以带选项,比如create table if not exists xxx;表示没有才创建
  还有一种写法,比如有一张a表,然后像创建一张结构与a表一样的b表时语法如下:
  1. create table b like a;
复制代码
1.2 创建表案例

  1. mysql> create table users (
  2. id int,
  3. name varchar(20) comment '用户名',  
  4. password char(32) comment '32位密码',
  5. birthday date comment '生日'  
  6. ) charset=utf8mb4;
复制代码
int表示整形,varchar表示变长字符串范例,char表示定长字符串范例,date表示日期范例,而comment表示对当火线属性的一个说明
当使用不同的存储引擎创建表时,最终在目录中所创建相关的文件个数是不同的,使用innoDB引擎时:
  1. root@VM-16-3-ubuntu:/var/lib/mysql/base# ls
  2. users.ibd
复制代码
使用MyISAM引擎时:
  1. root@VM-16-3-ubuntu:/var/lib/mysql/base# ls
  2. users_375.sdi  users.MYD  users.MYI
复制代码
1.3 查看表

使用show可以查看当前数据库中存在的表:
  1. mysql> show tables;
  2. +----------------+
  3. | Tables_in_base |
  4. +----------------+
  5. | users          |
  6. +----------------+
  7. 1 row in set (0.00 sec)
复制代码
  条件是要在对应的数据库中
  要查看某个表的详细信息时使用desc:
  1. mysql> desc users;
  2. +----------+-------------+------+-----+---------+-------+
  3. | Field    | Type        | Null | Key | Default | Extra |
  4. +----------+-------------+------+-----+---------+-------+
  5. | id       | int         | YES  |     | NULL    |       |
  6. | name     | varchar(20) | YES  |     | NULL    |       |
  7. | password | char(32)    | YES  |     | NULL    |       |
  8. | birthday | date        | YES  |     | NULL    |       |
  9. +----------+-------------+------+-----+---------+-------+
  10. 4 rows in set (0.01 sec)
复制代码
从左到右分别表示的是:字段名称(列属性)、字段范例、是否允许为空、索引范例、默认值和扩充
   格式化表现带上\G:desc users \G;
  如果要查看更加详细的表信息是可以使用如下指令:
  1. mysql> show create table users;
  2. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  3. | Table | Create Table                                                                                                                                                                                                                                                                        |
  4. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | users | CREATE TABLE `users` (
  6.   `id` int DEFAULT NULL,
  7.   `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  8.   `password` char(32) DEFAULT NULL COMMENT '32位密码',
  9.   `birthday` date DEFAULT NULL COMMENT '生日'
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci         |
  11. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  12. 1 row in set (0.00 sec)
复制代码
格式化表现只需要把最后的冒号换成\G:
  1. mysql> show create table users \G
  2. *************************** 1. row ***************************
  3.        Table: users
  4. Create Table: CREATE TABLE `users` (
  5.   `id` int DEFAULT NULL,
  6.   `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  7.   `password` char(32) DEFAULT NULL COMMENT '32位密码',
  8.   `birthday` date DEFAULT NULL COMMENT '生日'
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  10. 1 row in set (0.00 sec)
复制代码
这种做法相当于是把当初创建表时的有用操作给记载下来了,所以是最详细的,包含了说明和字符集等等,不过可以发现的时间上面的写法貌似和当初本身写的不太一样,这是因为mysqld要对下令举行语法和词法分析,并对其按照标准举行修改优化,最后再去实行优化后的下令,也就是上面这样
2. 表的修改

2.1 修改表名

将表名user修改为us:
  1. mysql> alter table users rename to us;
  2. Query OK, 0 rows affected (0.03 sec)
  3. mysql> show tables;
  4. +----------------+
  5. | Tables_in_base |
  6. +----------------+
  7. | us             |
  8. +----------------+
  9. 1 row in set (0.00 sec)
复制代码
其中to可以省略
还有一种写法:
  1. rename table table_name_a to table_name_b [, ...]
复制代码
2.2 插入数据

插入一条记载:
  1. mysql> insert into us values (1, 'lzh', '12345', '2003.9.10');
复制代码
  也叫全列插入
  插入多条记载,中间使用逗号隔开
如果只想插入其中几列时写法如下:
  1. mysql> insert into us (id, password) values (1, '12345');
复制代码
前面一个括号里填入需要写入的列名,后面则是对应的数据,但要注意的是,当使用指定列插入时,必须确保:


  • 指定的列名在表中存在
  • 提供的值的数目与指定的列的数目相匹配
  • 值的范例与对应列的数据范例兼容。
而且如果表中有任何列被设置为not null且没有默认值,并且这些列没有被包罗在insert语句中,那么将无法实行该insert操作,除非为这些列提供了默认值或允许它们担当null值
查看表内容:
  1. mysql> select * from us;
  2. +------+------+----------+------------+
  3. | id   | name | password | birthday   |
  4. +------+------+----------+------------+
  5. |    1 | lzh  | 12345    | 2003-09-10 |
  6. |    1 | zz   | 12345    | 2003-09-10 |
  7. +------+------+----------+------------+
复制代码
2.3 新增一列

假设新增一列用来保存存储路径:
  1. mysql> alter table us add path varchar(128) comment '路径' after birthday;
  2. Query OK, 4 rows affected (0.06 sec)
  3. Records: 4  Duplicates: 0  Warnings: 0
  4. mysql> select * from us;
  5. +------+------+----------+------------+------+
  6. | id   | name | password | birthday   | path |
  7. +------+------+----------+------------+------+
  8. |    1 | lzh  | 12345    | 2003-09-10 | NULL |
  9. |    1 | zz   | 12345    | 2003-09-10 | NULL |
  10. |    4 | lzh  | 12345    | 2003-09-10 | NULL |
  11. |    5 | pp   | 666      | 2024-09-19 | NULL |
  12. +------+------+----------+------------+------+
  13. 4 rows in set (0.00 sec)
复制代码
新增并不会对之火线中的数据产生影响,只是新增列中的数据为空
   after xxx表示在xxx那一列之后添加
  2.4 修改某列

2.4.1 修改列的范例

将name列的数据范例改为varchar(60):
  1. mysql> alter table us modify name varchar(60);
  2. Query OK, 4 rows affected (0.05 sec)
  3. Records: 4  Duplicates: 0  Warnings: 0
  4. mysql> show create table us \G;
  5. *************************** 1. row ***************************
  6.        Table: us
  7. Create Table: CREATE TABLE `us` (
  8.   `id` int DEFAULT NULL,
  9.   `name` varchar(60) DEFAULT NULL,
  10.   `password` char(32) DEFAULT NULL COMMENT '32位密码',
  11.   `birthday` date DEFAULT NULL COMMENT '生日',
  12.   `path` varchar(128) DEFAULT NULL COMMENT '路径'
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  14. 1 row in set (0.00 sec)
  15. ERROR:
  16. No query specifie
复制代码
可以发现,修改是直接覆盖最初的指令,把原来的属性和描述信息直接替换了
2.4.2 修改列名

把列名id改成user_id:
  1. mysql> alter table us change column id user_id int;
  2. Query OK, 0 rows affected (0.04 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0
  4. mysql> desc us;
  5. +----------+--------------+------+-----+---------+-------+
  6. | Field    | Type         | Null | Key | Default | Extra |
  7. +----------+--------------+------+-----+---------+-------+
  8. | user_id  | int          | YES  |     | NULL    |       |
  9. | name     | varchar(60)  | YES  |     | NULL    |       |
  10. | password | char(32)     | YES  |     | NULL    |       |
  11. | birthday | date         | YES  |     | NULL    |       |
  12. | path     | varchar(128) | YES  |     | NULL    |       |
  13. +----------+--------------+------+-----+---------+-------+
复制代码
change column 旧列名 新列名 新数据范例和属性 (约束)
   column可以省略
  2.5 删除某列

删除当前表中的password列:
  1. mysql> alter table user drop password;
  2. Query OK, 4 rows affected (0.03 sec)
  3. Records: 4  Duplicates: 0  Warnings: 0
  4. mysql> desc user;
  5. +----------+--------------+------+-----+---------+-------+
  6. | Field    | Type         | Null | Key | Default | Extra |
  7. +----------+--------------+------+-----+---------+-------+
  8. | user_id  | int          | YES  |     | NULL    |       |
  9. | name     | varchar(60)  | YES  |     | NULL    |       |
  10. | birthday | date         | YES  |     | NULL    |       |
  11. | path     | varchar(128) | YES  |     | NULL    |       |
  12. +----------+--------------+------+-----+---------+-------+
  13. mysql> select * from user;
  14. +---------+------+------------+------+
  15. | user_id | name | birthday   | path |
  16. +---------+------+------------+------+
  17. |       1 | lzh  | 2003-09-10 | NULL |
  18. |       1 | zz   | 2003-09-10 | NULL |
  19. |       4 | lzh  | 2003-09-10 | NULL |
  20. |       5 | pp   | 2024-09-19 | NULL |
  21. +---------+------+------------+------+
复制代码
删除某列后,该列对应的数据也被删掉了
3. 表的删除

语法类似库的删除,很简单,drop table xxx:
  1. mysql> show tables;
  2. +----------------+
  3. | Tables_in_base |
  4. +----------------+
  5. | stu            |
  6. | user           |
  7. +----------------+
  8. 2 rows in set (0.00 sec)
  9. mysql> drop table stu;
  10. Query OK, 0 rows affected (0.04 sec)
  11. mysql> show tables;
  12. +----------------+
  13. | Tables_in_base |
  14. +----------------+
  15. | user           |
  16. +----------------+
  17. 1 row in set (0.00 sec)
复制代码
  也可以带选项,比如drop table if exists xxx;存在才删除
  4. 注意

和库一样,不要容易对表举行修改和删除,因为数据库是比较接近底层的,上层程序大概有很多地方都要用到这个数据库以及对应的表,如果你把名字改了,那上层都得跟着改,降低了维护性

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表