8.3 - mysql 表操作
Posted 如果迎着风就飞,俯瞰这世界有多美
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.3 - mysql 表操作相关的知识,希望对你有一定的参考价值。
什么是存储引擎
mysql中建立的库===>文件夹
库中建立的表===>文件
存储引擎就是表的类型
现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等
数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql
数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据
自己的需要编写自己的存储引擎
mysql支持的存储引擎
mysql> show engines\\G; *************************** 1. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engine Transactions: NO XA: NO Savepoints: NO *************************** 2. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tables Transactions: NO XA: NO Savepoints: NO *************************** 3. row *************************** Engine: CSV Support: YES Comment: CSV storage engine Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears) Transactions: NO XA: NO Savepoints: NO *************************** 5. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance Schema Transactions: NO XA: NO Savepoints: NO *************************** 6. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 7. row *************************** Engine: ARCHIVE Support: YES Comment: Archive storage engine Transactions: NO XA: NO Savepoints: NO *************************** 8. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables Transactions: NO XA: NO Savepoints: NO *************************** 9. row *************************** Engine: FEDERATED Support: NO Comment: Federated MySQL storage engine Transactions: NULL XA: NULL Savepoints: NULL 9 rows in set (0.00 sec) ERROR: No query specified
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec)
mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | t1 | +---------------+ 1 row in set (0.00 sec) # 创建指定引擎的表 mysql> create table t2(id int) engine=innodb; Query OK, 0 rows affected (0.03 sec) # 查看创建的过程 mysql> show create table t2\\G; *************************** 1. row *************************** Table: t2 Create Table: CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) ERROR: No query specified # 其他类型的引擎方式 mysql> create table t3(id int) engine=memory; # 存在内存中,只有表结构,没有数据 Query OK, 0 rows affected (0.00 sec) mysql> create table t4(id int) engine=blackhole; # 存入的数据就没啦 Query OK, 0 rows affected (0.00 sec) mysql> create table t5(id int) engine=myisam; Query OK, 0 rows affected (0.00 sec)
mysql> insert into t3 values(1); Query OK, 1 row affected (0.00 sec) mysql> insert into t4 values(1); Query OK, 1 row affected (0.00 sec) mysql> insert into t5 values(1); Query OK, 1 row affected (0.00 sec) mysql> select * from t3; # 存于内存,重启mysql就啦 +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) mysql> select * from t4; # 数据没有啦,黑洞 Empty set (0.00 sec) mysql> select * from t5; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) # 重启mysql 查看t3的数据 Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status leco@leco:/etc/mysql/mysql.conf.d$ /etc/init.d/mysql restart [ ok ] Restarting mysql (via systemctl): mysql.service. leco@leco:/etc/mysql/mysql.conf.d$ mysql -uroot -pleco mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \\g. Your MySQL connection id is 3 Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement. mysql> use db1; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | t1 | | t2 | | t3 | | t4 | | t5 | +---------------+ 5 rows in set (0.00 sec) mysql> desc t3; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> select * from t3; # 发现数据么有啦 Empty set (0.00 sec)
mysql 表的增删改查
id,name,age,sex 是表字段,其他均是数据
创建表
语法
create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #注意: 1. 在同一张表中,字段名是不能相同 2. 宽度和约束条件可选 3. 字段名和类型是必须的
4. []数据中是可有可无的
5. 每行有逗号,除了最后一条数据
详细操作步骤
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> create database db2 charset utf8; Query OK, 1 row affected (0.00 sec) mysql> use db2; Database changed mysql> create table t1( -> id int, -> name varchar(50), -> sex enum(\'male\',\'female\'), -> age int(3) -> ); Query OK, 0 rows affected (0.03 sec) mysql> desc t1; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | sex | enum(\'male\',\'female\') | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
插入数据
mysql> insert into t1 values(1,\'cmz\',\'male\',18); # 单条数据插入 Query OK, 1 row affected (0.01 sec) mysql> insert into t1 values(2,\'leco\',\'female\',10),(3,\'loocha\',\'male\',8); # 多条数据插入 Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t1; +------+--------+--------+------+ | id | name | sex | age | +------+--------+--------+------+ | 1 | cmz | male | 18 | | 2 | leco | female | 10 | | 3 | loocha | male | 8 | +------+--------+--------+------+ 3 rows in set (0.00 sec)
修改表结构
语法: 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 字段放在开头 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 字段放在 after字段,该字段后 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
示例
示例: 1. 修改存储引擎 mysql> alter table service -> engine=innodb; 2. 添加字段 mysql> alter table student10 -> add name varchar(20) not null, -> add age int(3) not null default 22; mysql> alter table student10 -> add stu_num varchar(10) not null after name; //添加name字段之后 mysql> alter table student10 -> add sex enum(\'male\',\'female\') default \'male\' first; //添加到最前面 3. 删除字段 mysql> alter table student10 -> drop sex; mysql> alter table service -> drop mac; 4. 修改字段类型modify mysql> alter table student10 -> modify age int(3); mysql> alter table student10 -> modify id int(11) not null primary key auto_increment; //修改为主键 5. 增加约束(针对已有的主键增加auto_increment) mysql> alter table student10 modify id int(11) not null primary key auto_increment; ERROR 1068 (42000): Multiple primary key defined mysql> alter table student10 modify id int(11) not null auto_increment; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 6. 对已经存在的表增加复合主键 mysql> alter table service2 -> add primary key(host_ip,port); 7. 增加主键 mysql> alter table student1 -> modify name varchar(10) not null primary key; 8. 增加主键和自动增长 mysql> alter table student1 -> modify id int not null primary key auto_increment; 9. 删除主键 a. 删除自增约束 mysql> alter table student10 modify id int(11) not null; b. 删除主键 mysql> alter table student10 -> drop primary key; 五、复制表
具体演示操作
mysql> show tables; +---------------+ | Tables_in_db2 | +---------------+ | t1 | +---------------+ 1 row in set (0.00 sec) mysql> desc t1; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | sex | enum(\'male\',\'female\') | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> select * from t1; +------+--------+--------+------+ | id | name | sex | age | +------+--------+--------+------+ | 1 | cmz | male | 18 | | 2 | leco | female | 10 | | 3 | loocha | male | 8 | +------+--------+--------+------+ 3 rows in set (0.00 sec) #1. 修改存储引擎 mysql> alter table t1 engine=innodb; Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table t1\\G; *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `name` varchar(50) DEFAULT NULL, `sex` enum(\'male\',\'female\') DEFAULT NULL, `age` int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) ERROR: No query specified #2. 添加字段 mysql> create table student(id int); Query OK, 0 rows affected (0.02 sec) mysql> desc student; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> alter table student add name varchar(20) not null, # 默认不能为空 -> add age int(10) not null default 22; # 默认不能为空,默认值是22 Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | NO | | NULL | | | age | int(10) | NO | | 22 | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) # 添加到最开始 mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ mysql> alter table student add sex enum(\'male\',\'female\') default \'male\' first; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | YES | | NULL | | | name | varchar(20) | NO | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) # 插入××之后 mysql> desc student; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | YES | | NULL | | | name | varchar(20) | NO | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> alter table student add stu_num varchar(10) not null after id; #插入在id之后 Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +---------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | YES | | NULL | | | stu_num | varchar(10) | NO | | NULL | | | name | varchar(20) | NO | | NULL | | +---------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) #3. 删除字段 mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | NO | | NULL | | | age | int(10) | NO | | 22 | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> alter table student drop age; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) #4. 修改字段类型modify mysql> desc student; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | YES | | NULL | | | age | int(3) | NO | | 22 | | | name | varchar(20) | NO | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> alter table student modify name varchar(10) not null; Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | YES | | NULL | | | age | int(3) | NO | | 22 | | | name | varchar(10) | NO | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> alter table student modify id int(11) not null primary key auto_increment; # 修改id为主键 Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+----------------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | NO | PRI | NULL | auto_increment | | age | int(3) | NO | | 22 | | | name | varchar(10) | NO | | NULL | | +-------+-----------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) #5. 增加约束(针对已有的主键增加auto_increment) mysql> alter table student modify id int(11) not null primary key auto_increment; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+----------------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | NO | PRI | NULL | auto_increment | | age | int(3) | NO | | 22 | | | name | varchar(10) | NO | | NULL | | +-------+-----------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) mysql> alter table student modify id int(11) not null primary key auto_increment; ERROR 1068 (42000): Multiple primary key defined mysql> alter table student modify id int(11) not null auto_increment; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+----------------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | NO | PRI | NULL | auto_increment | | age | int(3) | NO | | 22 | | | name | varchar(10) | NO | | NULL | | +-------+-----------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) #6. 对于存在的表增加复合主键 mysql> desc student; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | NO | | NULL | | | age | int(3) | NO | | 22 | | | name | varchar(10) | NO | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> alter table student add primary key(id,age); Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------------+------+-----+---------+-------+ | sex | enum(\'male\',\'female\') | YES | | male | | | id | int(11) | NO | PRI | NULL | | | age | int(3) | NO | PRI | 22 | | | name | varchar(10) | NO | | NULL | | +-------+-----------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) #7. 增加主键 mysql> alter table student modify id int(11) not null primary key; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 #8. 增加主键,自动增长 mysql> alter table student modify id int(11) not null primary key auto_increment; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 #9. 删除主键 # 1. 先删除子增约束 # 2. 删除主键 mysql> desc student; +-------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra以上是关于8.3 - mysql 表操作的主要内容,如果未能解决你的问题,请参考以下文章