mysql 表操作

Posted 人生何必久睡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 表操作相关的知识,希望对你有一定的参考价值。

一、表介绍

表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

二 、创建表

1、基本语法

# 语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
# 解释:
类型:使用限制字段必须以什么样的数据类型传值
约束条件:约束条件是在类型之外添加一种额外的限制
# 注意: 1. 在同一张表中,字段名是不能相同 2. 宽度和约束条件可选 3. 字段名和类型是必须的
4. 表中的最后一个字段不能加逗号 ’,‘

2、数据表操作

查看表之前先选择数据库
use db1;
查看当前库下所有的表
show tables;
单独查看一个表的信息
show create tables  t1;
查看表的结构
desc t1;
创建表
create table t1 (字段名 数据类型 [完整性约束条件]);
修改表名
alter table t1 rename t2;
删除表
drop table t1;
清空表
delete from t1; (清除表里的所有记录,不会表的id重置为0)
truncate t1;(将整张表重置,包括数据,和自增长的id)

3、查看表结构

mysql> desc t2
 

三、数据类型

1、整形类型(一般常用  int  )

1、作用:id号,各种号码,年龄,等级
2、分类:
tinyint----tinyint[(m)] [unsigned] [zerofill]
有符号:-128 ~ 127
无符号:0 ~ 255
int--------int[(m)][unsigned][zerofill]
有符号:-2147483648 ~ 2147483647
无符号: 0 ~ 4294967295
bigint-----[(m)][unsigned][zerofill]
有符号:-9223372036854775808 ~ 9223372036854775807
无符号:0 ~ 18446744073709551615
3、测试:默认整型都是有符号的 create table t1(x tinyint); insert into t1 values(128),(-129); create table t2(x tinyint unsigned); insert into t2 values(-1),(256); create table t3(x int unsigned); #4294967295 insert into t3 values(4294967296); create table t4(x int(12) unsigned); insert into t4 values(4294967296123); 4强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制 所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据 # 显示时,不够8位用0填充,如果超出8位则正常显示 create table t5(x int(8) unsigned zerofill); insert into t5 values(4294967296123); insert into t5 values(1);

 

2、浮点型(一般常用  float  )

作用:存储身高、体重、薪资
分类:
float (*****)
double (**)
decimal (**)

测试:
#相同点
#1、对于三者来说,都能存放30位小数,
#不同点:
1、精度的排序从低到高:float,double,decimal
2、float与double类型能存放的整数位比decimal更多


create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));

insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);


mysql> select * from t9;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t10;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t11;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)

 

3、字符类型

1、作用:姓名,地址,描述类的信息

2、分类:
char 定长
varchar 变长

char
# 缺点:浪费空间
# 优点:存取速度都快

varchar
# 缺点:存取速度都慢
# 优点:节省空间

3、测试:字符的宽度限制单位是字符个数 create table t12(x char(4)); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符 create table t13(y varchar(4));# 超出4个字符则报错,不够4个字符那么字符有几个就存几个 insert into t12 values(\'hello\'); insert into t13 values(\'hello\'); insert into t12 values(\'a\'); #\'a \' insert into t13 values(\'a\'); #\'a\' set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH"; select char_length(x) from t12; #4 select char_length(y) from t13; #1 # 注意: 针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中 但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用 mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用 mysql> select * from t14 where name like "lxx"; # name字段模糊匹配一个值,该值后填充空格是有用的

 

4、日期类型

 

1、作用:时间相关

2、分类:
date:1999-01-27
time: 11:11:11
datetime:1999-01-27 11:11:11
year:1999

3、测试
create table student(
    id int,
    name char(16),
    born_year year,
    birth date,
    class_time time,
    reg_time datetime
);

insert into student values(1,\'egon\',\'2000\',\'2000-01-27\',\'08:30:00\',\'2013-11-11 11:11:11\');

 

5、枚举和集合类型

作用与分类:
枚举enum,多选一个
集合set,多选多


测试

create table teacher(
    id int,
    name char(16),
    sex enum(\'male\',\'female\',\'others\'),
    hobbies set(\'play\',\'read\',\'music\',\'piao\')
);

四、约束条件

http://www.cnblogs.com/fixdq/p/9009263.html

五、修改表

语法:
1. 修改表名
      ALTER TABLE 表名 
                          RENAME 新表名;

2. 增加字段
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…],
                          ADD 字段名  数据类型 [完整性约束条件…];
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
                            
3. 删除字段
      ALTER TABLE 表名 
                          DROP 字段名;

4. 修改字段
      ALTER TABLE 表名 
                          MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

六、复制表

1、复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

2、只复制表结构(就是复制表的时候   给定一个为假的条件 )
mysql> select * from service where 1=2;        //条件为假,查不到任何记录
Empty set (0.00 sec)
mysql
> create table new1_service select * from service where 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> create table t4 like employees;

以上是关于mysql 表操作的主要内容,如果未能解决你的问题,请参考以下文章

sql Closure表操作SQL片段

Mysql Innodb 表碎片整理

sqlalchemy——单表操作

部分代码片段

MySQL表操作过程的基础代码解析

linux中怎么查看mysql数据库版本