mysql基础二

表的操作

显示所有的表

show tables

创建表

create table [if not exists] 表名 (
	字段名 数据类型 [null|not null][auto_increment][primary key][comment],
	字段名 数据类型 [default]...
	)engine=存储引擎

单词

null | not null   	空|非空
default	          	默认值
auto_increment    	自动增长
primary key       	主键
comment           	备注
engine           	引擎   innodb  myisam  memory  引擎是决定数据存储的方式

创建简单的表

mysql> create database itcast;
Query OK, 1 row affected (0.00 sec)

mysql> use itcast;
Database changed
mysql> show tables;
Empty set (0.05 sec)

# 创建表
mysql> create table stu(
    -> id int,
    -> name varchar(30)
    -> );
Query OK, 0 rows affected (0.13 sec)
# 查看创建的表
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| stu              |
+------------------+

创建复杂的表

mysql> set names gbk;   # 设置字符编码
Query OK, 0 rows affected (0.05 sec)

mysql> create table if not exists teacher(
    -> id int auto_increment primary key comment '主键',
    -> name varchar(20) not null comment '姓名',
    -> phone varchar(20) comment '电话号码',
    -> `add` varchar(100) default '地址不详' comment '地址'
    -> )engine=innodb;
Query OK, 0 rows affected (0.09 sec)

create table 数据库名.表名,用于给指定的数据库创建表

mysql> create table data.stu(  #给data数据库中创建stu表
    -> id int,
    -> name varchar(10));
Query OK, 0 rows affected (0.00 sec)

显示创建表的语句

语法:

show create table 表名

显示创建teacher表的语句

mysql> show create table teacher;
+---------+--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------+
| Table   | Create Table


       |
+---------+--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `phone` varchar(20) DEFAULT NULL COMMENT '电话号码',
  `add` varchar(100) DEFAULT '地址不详' COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8                         |

查看表结构

语法:

desc[ribe] 表名

查看teacher表结构

mysql> describe teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
+-------+--------------+------+-----+----------+----------------+
4 rows in set (0.08 sec)

mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
+-------+--------------+------+-----+----------+----------------+
4 rows in set (0.01 sec)

删除表

语法:

drop table [if exists] 表1,表2,… 

删除表

mysql> drop table stu;
Query OK, 0 rows affected (0.08 sec)

修改表

alter table 表名
  1. 添加字段:alter table 表名add[column] 字段名 数据类型 [位置]

    1. 添加字段

      mysql> alter table teacher add age int;
      Query OK, 0 rows affected (0.09 sec)
      Records: 0  Duplicates: 0  Warnings: 0
      
      mysql> desc teacher;
      +-------+--------------+------+-----+----------+----------------+
      | Field | Type         | Null | Key | Default  | Extra          |
      +-------+--------------+------+-----+----------+----------------+
      | id    | int(11)      | NO   | PRI | NULL     | auto_increment |
      | name  | varchar(20)  | NO   |     | NULL     |                |
      | phone | varchar(20)  | YES  |     | NULL     |                |
      | add   | varchar(100) | YES  |     | 地址不详        |                |
      | age   | int(11)      | YES  |     | NULL     |                |
      +-------+--------------+------+-----+----------+----------------+
      5 rows in set (0.00 sec)
      
    2. 在第一个位置上添加字段

      mysql> alter table teacher add email varchar(30) first;
      Query OK, 0 rows affected (0.00 sec)
      Records: 0  Duplicates: 0  Warnings: 0
      
      mysql> desc teacher;
      +-------+--------------+------+-----+----------+----------------+
      | Field | Type         | Null | Key | Default  | Extra          |
      +-------+--------------+------+-----+----------+----------------+
      | email | varchar(30)  | YES  |     | NULL     |                |
      | id    | int(11)      | NO   | PRI | NULL     | auto_increment |
      | name  | varchar(20)  | NO   |     | NULL     |                |
      | phone | varchar(20)  | YES  |     | NULL     |                |
      | add   | varchar(100) | YES  |     | 地址不详        |                |
      | age   | int(11)      | YES  |     | NULL     |                |
      +-------+--------------+------+-----+----------+----------------+
      
    3. 在指定的字段后添加字段

      mysql> alter table teacher add sex varchar(2) after name;
      Query OK, 0 rows affected (0.00 sec)
      Records: 0  Duplicates: 0  Warnings: 0
      
      mysql> desc teacher;
      +-------+--------------+------+-----+----------+----------------+
      | Field | Type         | Null | Key | Default  | Extra          |
      +-------+--------------+------+-----+----------+----------------+
      | email | varchar(30)  | YES  |     | NULL     |                |
      | id    | int(11)      | NO   | PRI | NULL     | auto_increment |
      | name  | varchar(20)  | NO   |     | NULL     |                |
      | sex   | varchar(2)   | YES  |     | NULL     |                |
      | phone | varchar(20)  | YES  |     | NULL     |                |
      | add   | varchar(100) | YES  |     | 地址不详        |                |
      | age   | int(11)      | YES  |     | NULL     |                |
      +-------+--------------+------+-----+----------+----------------+
      7 rows in set (0.00 sec)
      
  2. 删除字段:alter table 表 drop [column] 字段名

    mysql> alter table teacher drop email;
    Query OK, 0 rows affected (0.06 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  3. 修改字段(改名改类型):alter table 表 change [column] 原字段名 新字段名 数据类型…

    将字段sex改为xingbie,数据类型为int

    mysql> alter table teacher change sex xingbie int;
    Query OK, 0 rows affected (0.00 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  4. 修改字段(不改名):alter table 表 modify 字段名 字段属性 …

    将性别的数据类型改为varchar(2)

    mysql> alter table teacher modify xingbie varchar(2);
    Query OK, 0 rows affected (0.00 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  5. 修改引擎:alter table 表名 engine=引擎名

    mysql> alter table teacher engine=myisam;
    Query OK, 0 rows affected (0.05 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  6. 修改表名:alter table 表名 rename to 新表名

    mysql> alter table teacher rename to stu;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show tables;
    +------------------+
    | Tables_in_itcast |
    +------------------+
    | stu              |
    +------------------+
    1 row in set (0.00 sec)
    

复制表

语法一: create table 新表 select 字段 from 旧表

特点:不能复制父表的主键,能够复制父表的数据

mysql> create table stu1 select * from stu;
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from stu1;    # 查看数据复制到新表中
+----+------+------+-------+
| id | name | addr | score |
+----+------+------+-------+
|  1 | rose | 上海    |    88 |
+----+------+------+-------+
1 row in set (0.00 sec)

mysql> desc stu1;    #  主键没有复制
+-------+-------------+------+-----+----------+-------+
| Field | Type        | Null | Key | Default  | Extra |
+-------+-------------+------+-----+----------+-------+
| id    | int(11)     | NO   |     | 0        |       |
| name  | varchar(20) | NO   |     | NULL     |       |
| addr  | varchar(50) | YES  |     | 地址不详        |       |
| score | int(11)     | YES  |     | NULL     |       |
+-------+-------------+------+-----+----------+-------+
4 rows in set (0.00 sec)
语法二: create table 新表 like 旧表

特点: 只能复制表结构,不能复制表数据

Query OK, 0 rows affected (0.00 sec)

mysql> select * from stu2;   # 数据没有复制
Empty set (0.01 sec)

mysql> desc stu2;   # 主键复制了
+-------+-------------+------+-----+----------+----------------+
| Field | Type        | Null | Key | Default  | Extra          |
+-------+-------------+------+-----+----------+----------------+
| id    | int(11)     | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20) | NO   |     | NULL     |                |
| addr  | varchar(50) | YES  |     | 地址不详        |                |
| score | int(11)     | YES  |     | NULL     |                |
+-------+-------------+------+-----+----------+----------------+
4 rows in set (0.00 sec)

你可能感兴趣的:(mysql,数据库)