数据表的基本操作

表的创建基本介绍

基本语法

  • field 表示 列的名称,自定义如 name,age等
  • datetype 表的列的类型,这里的数据类型指的是mysql数据类型,必须指定
  • character set 字符集(也可以charset=utf8), 如果你没有指定字符集,则以所在数据库的字符集为准。
  • collate 校验规则, 如果你没有指定校验规则,则以所在数据库的校验规则为准
  • engine 表示表的存储引擎,分为 InnoDB 和 MyISAM,默认是InnoDB,可在my.ini中更改
//filed:指定列名   datatype:指定列类型 (字段类型)
create table table_name(
	field1 datatype,
	field2 datatype,
	field3 datatype
) character set 字符集 collate 校验规则 engine 存储方式

代码示例

  • 每个字段必须有数据类型
  • comment ‘xxx’ 是注释
//创建表user 存储方式为MyISAM
mysql> create table user(
    -> id int,
    -> name varchar(60),
    -> password char(32) comment '密码是32位的md5值',
    -> birthday date comment '生日'
    -> )character set utf8 engine MyISAM;
Query OK, 0 rows affected (0.03 sec)

//创建表user1 存储方式为InnoDB
mysql> create table user1(
    -> id int,
    -> name varchar(60),
    -> password char(32) comment '密码是32位的md5值',
    -> birthday date comment '生日'
    ->
    -> )character set utf8 engine InnoDB;
Query OK, 0 rows affected (0.05 sec)

mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| user            |
| user1           |
+-----------------+
2 rows in set (0.00 sec)

文件结构
在这里插入图片描述

类型及约束

常见数据类型

详见 mysql的数据类型

常见约束条件

  • auto_increment定义列为自增的属性,一般用于主键,数值会自动加1
  • not null 在操作数据库时如果输入该字段的数据为NULL ,就会报错
  • primary key 用于定义列为主键
  • default 默认值,插入数据时如果不写会使用默认值
  • unsigned 只能添加正数,当不设置unsigned时,我们可以添加负数进去
  • comment ‘xxx’ 是注释,方便别的程序员了解字段含义,show create table 数据库名 可查看
create table students(
        id int unsigned primary key auto_increment not null comment 'id号',
        name varchar(20) not null comment '姓名',
        age int unsigned not null default 18 comment '年龄',
        height decimal(3,2) not null comment '身高'
)charset utf8;

查看表信息

//test表结构信息
mysql> desc test;
+------------+-----------------+------+-----+---------+-------+
| Field      | Type            | Null | Key | Default | Extra |
+------------+-----------------+------+-----+---------+-------+
| id         | int(11)         | NO   |     | 0       |       |
| name       | varchar(60)     | NO   |     |         |       |
| sex        | enum('男','女') | NO   |     | NULL    |       |
| birthday   | date            | NO   |     | NULL    |       |
| entry_date | date            | NO   |     | NULL    |       |
| job        | varchar(60)     | NO   |     |         |       |
| salary     | float           | NO   |     | 0       |       |
| resume     | text            | NO   |     | NULL    |       |
+------------+-----------------+------+-----+---------+-------+
8 rows in set (0.02 sec)

//test表的其他信息
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.5.27, for Win32 (x86)

Connection id:          6
Current database:       test
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.5.27 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1
TCP port:               3306
Uptime:                 12 days 1 hour 3 min 1 sec

Threads: 1  Questions: 55  Slow queries: 0  Opens: 40  Flush tables: 1  Open tables: 1  Queries per second avg: 0.000
--------------


//test表的创建信息
mysql> show create table test;
| test  | CREATE TABLE `test` (
  `id` int(11) NOT NULL DEFAULT '0' COMMENT 'id号',
  `name` varchar(60) NOT NULL DEFAULT '' COMMENT '用户名',
  `sex` enum('男','女') NOT NULL COMMENT '性别',
  `birthday` date NOT NULL COMMENT '生日',
  `entry_date` date NOT NULL COMMENT '入职时间',
  `job` varchar(60) NOT NULL DEFAULT '' COMMENT '工作',
  `salary` float NOT NULL DEFAULT '0' COMMENT '薪水',
  `resume` text NOT NULL COMMENT '个人介绍'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
1 row in set (0.00 sec)

编码问题

查看数据库编码格式

mysql> show variables like 'character%';
+--------------------------+-------------------------------------+
| Variable_name            | Value                               |
+--------------------------+-------------------------------------+
| character_set_client     | latin1                              |
| character_set_connection | latin1                              |
| character_set_database   | utf8                                |
| character_set_filesystem | binary                              |
| character_set_results    | latin1                              |
| character_set_server     | utf8                                |
| character_set_system     | utf8                                |
| character_sets_dir       | F:\wamp\mysql5.5.27\share\charsets\ |
+--------------------------+-------------------------------------+
8 rows in set (0.00 sec)

查看数据库表的编码

mysql> show create table user1;
+-------+----------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                               |
+-------+----------------------------------------------------------------------------------------------------------------------------+
| user1 | CREATE TABLE `user1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

一般用 set names gbk 解决

//黑框只认识gbk码 具体原因不懂
set names gbk;

//相当于以下代码
set character_set_client=gbk;
set character_set_results=gbk;
set character_set_connection=gbk;

表结构修改

概述

在项目实际开发中 ,我们会经常的修改某个表的结构,比如字段名称,字段的大小, 字段的类型,表的字符集类型,表的存储引擎等等. 我们还有需要是添加字段,删除字段等等 这时我们就需要使用到修改表的技术

快速入门案例

  • 在员工表test上增加一个image列(resume之后)
  • 修改job列,使其长度为50
  • 删除sex列
  • 表名改为user
  • 修改表的字符集为utf8
  • 列明name修改为username

创建一个表

//创建test表
mysql> create table test(
    -> id int not null default 0 comment 'id号',
    -> name varchar(60) not null default '' comment '用户名',
    -> sex enum('男','女') not null comment '性别',
    -> birthday date not null comment '生日',
    -> entry_date date not null comment '入职时间',
    -> job varchar(60) not null default '' comment '工作',
    -> salary float not null default 0.0 comment '薪水',
    -> resume text not null comment '个人介绍'
    -> )charset=utf8 engine=myisam;
Query OK, 0 rows affected (0.06 sec)


//插入两条数据
mysql> insert into test values(1, '赵信', 1, '2010-11-11', '2018-12-12', '管家', 8000.55, '一点寒芒先到,随后枪出如龙');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(2, '阿卡丽', 2, '2013-03-03', '2019-09-09', '刺客', 5555.55, '我随影而来,随影而去');
Query OK, 1 row affected (0.00 sec)

//查询数据
mysql> select * from test;
+----+--------+-----+------------+------------+------+---------+----------------------------+
| id | name   | sex | birthday   | entry_date | job  | salary  | resume                     |
+----+--------+-----+------------+------------+------+---------+----------------------------+
|  1 | 赵信       || 2010-11-11 | 2018-12-12 | 管家    | 8000.55 | 一点寒芒先到,随后枪出如龙                     |
|  2 | 阿卡丽       || 2013-03-03 | 2019-09-09 | 刺客    | 5555.55 | 我随影而来,随影而去                        |
+----+--------+-----+------------+------------+------+---------+----------------------------+
2 rows in set (0.00 sec)

添加字段 add

//alter table 表名 add 新字段名及类型约束 after 字段
//新增列(字段)  在员工表test上增加一个image列,  after resume表示在resume后添加,不写则默认加在最后
mysql> alter table test add image varchar(125) not null default '' comment '图片路径' after resume;;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+--------+-----+------------+------------+------+---------+----------------------------+-------+
| id | name   | sex | birthday   | entry_date | job  | salary  | resume                     | image |
+----+--------+-----+------------+------------+------+---------+----------------------------+-------+
|  1 | 赵信   || 2010-11-11 | 2018-12-12 | 管家 | 8000.55 | 一点寒芒先到,随后枪出如龙 |       |
|  2 | 阿卡丽 || 2013-03-03 | 2019-09-09 | 刺客 | 5555.55 | 我随影而来,随影而去       |       |
+----+--------+-----+------------+------------+------+---------+----------------------------+-------+
2 rows in set (0.00 sec)

修改字段 modify

//alter table 表名 modify 字段名及类型约束
//modify后的字段名必须是已存在的字段
mysql> alter table test modify job varchar(50) not null comment '工作';
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test;
+------------+-----------------+------+-----+---------+-------+
| Field      | Type            | Null | Key | Default | Extra |
+------------+-----------------+------+-----+---------+-------+
| id         | int(11)         | NO   |     | 0       |       |
| name       | varchar(60)     | NO   |     |         |       |
| sex        | enum('男','女') | NO   |     | NULL    |       |
| birthday   | date            | NO   |     | NULL    |       |
| entry_date | date            | NO   |     | NULL    |       |
| job        | varchar(50)     | NO   |     | NULL    |       |
| salary     | float           | NO   |     | 0       |       |
| resume     | text            | NO   |     | NULL    |       |
| image      | varchar(125)    | NO   |     |         |       |
+------------+-----------------+------+-----+---------+-------+
9 rows in set (0.02 sec)

修改字段名 change

//alter table 表名 change 旧字段名 新字段名及类型约束
//change的功能可以代替modify,change新旧字段名一样时相当于modify
mysql> alter table users change name user_name varchar(60) not null default '' comment '用户名';
Query OK, 2 rows affected (0.17 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from users;
+----+-----------+------------+------------+------+---------+----------------------------+-------+
| id | user_name | birthday   | entry_date | job  | salary  | resume                     | image |
+----+-----------+------------+------------+------+---------+----------------------------+-------+
|  1 | 赵信      | 2010-11-11 | 2018-12-12 | 管家 | 8000.55 | 一点寒芒先到,随后枪出如龙 |       |
|  2 | 阿卡丽    | 2013-03-03 | 2019-09-09 | 刺客 | 5555.55 | 我随影而来,随影而去       |       |
+----+-----------+------------+------------+------+---------+----------------------------+-------+
2 rows in set (0.00 sec)

mysql> desc users;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int(11)      | NO   |     | 0       |       |
| user_name  | varchar(60)  | NO   |     |         |       |
| birthday   | date         | NO   |     | NULL    |       |
| entry_date | date         | NO   |     | NULL    |       |
| job        | varchar(50)  | NO   |     | NULL    |       |
| salary     | float        | NO   |     | 0       |       |
| resume     | text         | NO   |     | NULL    |       |
| image      | varchar(125) | NO   |     |         |       |
+------------+--------------+------+-----+---------+-------+
8 rows in set (0.02 sec)

删除字段 drop

//alter table 表名 drop 字段名
mysql> alter table test drop sex;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+--------+------------+------------+------+---------+----------------------------+-------+
| id | name   | birthday   | entry_date | job  | salary  | resume                     | image |
+----+--------+------------+------------+------+---------+----------------------------+-------+
|  1 | 赵信   | 2010-11-11 | 2018-12-12 | 管家 | 8000.55 | 一点寒芒先到,随后枪出如龙 |       |
|  2 | 阿卡丽 | 2013-03-03 | 2019-09-09 | 刺客 | 5555.55 | 我随影而来,随影而去       |       |
+----+--------+------------+------------+------+---------+----------------------------+-------+
2 rows in set (0.00 sec)

mysql> desc test;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int(11)      | NO   |     | 0       |       |
| name       | varchar(60)  | NO   |     |         |       |
| birthday   | date         | NO   |     | NULL    |       |
| entry_date | date         | NO   |     | NULL    |       |
| job        | varchar(50)  | NO   |     | NULL    |       |
| salary     | float        | NO   |     | 0       |       |
| resume     | text         | NO   |     | NULL    |       |
| image      | varchar(125) | NO   |     |         |       |
+------------+--------------+------+-----+---------+-------+
8 rows in set (0.02 sec)

修改表名 rename

//alter table 旧表名 rename to 新表名
mysql> alter table test rename to users;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from users;
+----+--------+------------+------------+------+---------+----------------------------+-------+
| id | name   | birthday   | entry_date | job  | salary  | resume                     | image |
+----+--------+------------+------------+------+---------+----------------------------+-------+
|  1 | 赵信   | 2010-11-11 | 2018-12-12 | 管家 | 8000.55 | 一点寒芒先到,随后枪出如龙 |       |
|  2 | 阿卡丽 | 2013-03-03 | 2019-09-09 | 刺客 | 5555.55 | 我随影而来,随影而去       |       |
+----+--------+------------+------------+------+---------+----------------------------+-------+
2 rows in set (0.00 sec)

mysql> desc users;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int(11)      | NO   |     | 0       |       |
| name       | varchar(60)  | NO   |     |         |       |
| birthday   | date         | NO   |     | NULL    |       |
| entry_date | date         | NO   |     | NULL    |       |
| job        | varchar(50)  | NO   |     | NULL    |       |
| salary     | float        | NO   |     | 0       |       |
| resume     | text         | NO   |     | NULL    |       |
| image      | varchar(125) | NO   |     |         |       |
+------------+--------------+------+-----+---------+-------+
8 rows in set (0.02 sec)

修改表的存储引擎,字符集

mysql> alter table users charset=utf8;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> alter table users engine=InnoDB;
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

总结

// 数据表结构修改 非表内数据

-- 查看表结构
desc 表名

-- 修改表-添加字段
-- alter table 表名 add 列名 类型;
alter table students add birthday datetime;

-- 修改表-修改字段:不重命名版
-- alter table 表名 modify 列名 类型及约束;
alter table students modify birthday date;

-- 修改表-修改字段:重命名版
-- alter table 表名 change 原名 新名 类型及约束;
alter table students change birthday birth date default "2000-01-01";

-- 修改表-删除字段
-- alter table 表名 drop 列名;
alter table students drop high;

-- 删除表
-- drop database 数据库;
-- drop table 数据表;
-- drop table xxxxx;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值