美文网首页
Chapter 13 .数据类型&数据的增删改

Chapter 13 .数据类型&数据的增删改

作者: GeekGray | 来源:发表于2018-10-04 16:39 被阅读6次

阅读原文

Chapter 13 .数据类型&数据的增删改

常见的数据类型

/*

数值型:

整型
小数:
    定点数
    浮点数

字符型:

较短的文本:char、varchar
较长的文本:text、blob(较长的二进制数据)

日期型:

*/

一、整型

/*

分类:

tinyint、smallint、mediumint、int/integer、bigint

1 2 3 4 8

特点:

  • ① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字

  • ② 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值

  • ③ 如果不设置长度,会有默认的长度

长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

*/

1.如何设置无符号和有符号

DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
    t1 INT(7) ZEROFILL,
    t2 INT(7) ZEROFILL 

);

DESC tab_int;


INSERT INTO tab_int VALUES(-123456);
INSERT INTO tab_int VALUES(-123456,-123456);
INSERT INTO tab_int VALUES(2147483648,4294967296);

INSERT INTO tab_int VALUES(123,123);


SELECT * FROM tab_int;

二、小数

/*

分类:

1.浮点型

float(M,D)
double(M,D)

2.定点型

dec(M,D)
decimal(M,D)

特点:


  • M:整数部位+小数部位
    D:小数部位
    如果超过范围,则插入临界值


  • M和D都可以省略
    如果是decimal,则M默认为10,D默认为0
    如果是float和double,则会根据插入的数值的精度来决定精度

  • ③定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

*/

测试M和D

DROP TABLE tab_float;
CREATE TABLE tab_float(
    f1 FLOAT,
    f2 DOUBLE,
    f3 DECIMAL
);
SELECT * FROM tab_float;
DESC tab_float;

INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);
INSERT INTO tab_float VALUES(123.4,123.4,123.4);
INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4);

原则:

/*

所选择的类型越简单越好,能保存数值的类型越小越好

*/

三、字符型

/*

较短的文本:

char
varchar

其他:

binary和varbinary用于保存较短的二进制

enum用于保存枚举

set用于保存集合

较长的文本:

text
blob(较大的二进制)

特点:

写法 M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省, 默认为1,略固定长度的字符 比较耗费
varchar varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省

*/

CREATE TABLE tab_char(
    c1 ENUM('a','b','c')


);


INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('m');
INSERT INTO tab_char VALUES('A');

SELECT * FROM tab_set;



CREATE TABLE tab_set(

    s1 SET('a','b','c','d')



);
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');

四、日期型

/*

分类:

  • date只保存日期

  • time 只保存时间

  • year只保存年

  • datetime保存日期+时间

  • timestamp保存日期+时间

特点:

字节 范围 时区等的影响
datetime 8 1000——9999 不受
timestamp 4 1970-2038

*/

CREATE TABLE tab_date(
    t1 DATETIME,
    t2 TIMESTAMP

);



INSERT INTO tab_date VALUES(NOW(),NOW());

SELECT * FROM tab_date;


SHOW VARIABLES LIKE 'time_zone';

SET time_zone='+9:00';

2. 数据的增删改

DML语言

/*

数据操作语言:

  • 插入:insert

  • 修改:update

  • 删除:delete

*/

一、插入语句

方式一:经典的插入

/*

语法:

insert into 表名(列名,...) values(值1,...);

*/

SELECT * FROM beauty;

1.插入的值的类型要与列的类型一致或兼容

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);

2.不可以为null的列必须插入值。可以为null的列如何插入值?

方式一:

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);

方式二:

INSERT INTO beauty(id,NAME,sex,phone)
VALUES(15,'娜扎','女','1388888888');

3.列的顺序是否可以调换

INSERT INTO beauty(NAME,sex,id,phone)
VALUES('蒋欣','女',16,'110');

4.列数和值的个数必须一致

INSERT INTO beauty(NAME,sex,id,phone)
VALUES('关晓彤','女',17,'110');

5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致

INSERT INTO beauty
VALUES(18,'张飞','男',NULL,'119',NULL,NULL);

方式二:

/*

语法:

insert into 表名
set 列名=值,列名=值,...

*/

INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999';

两种方式大pk ★

1、方式一支持插入多行,方式二不支持

INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2)
,(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2)
,(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);

2、方式一支持子查询,方式二不支持

INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866';

INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234567'
FROM boys WHERE id<3;

二、修改语句

/*

1.修改单表的记录★

语法:

update 表名
set 列=新值,列=新值,...
where 筛选条件;

2.修改多表的记录【补充】

语法:

sql92语法:

update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;

sql99语法:

update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;

*/

1.修改单表的记录

案例1:修改beauty表中姓唐的女神的电话为13899888899

UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';

案例2:修改boys表中id好为2的名称为张飞,魅力值 10

UPDATE boys SET boyname='张飞',usercp=10
WHERE id=2;

2.修改多表的记录

案例 1:修改张无忌的女朋友的手机号为114

UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='张无忌';

案例2:修改没有男朋友的女神的男朋友编号都为2号

UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;

SELECT * FROM boys;

三、删除语句

/*

方式一:delete

语法:

1、单表的删除【★】

delete from 表名 where 筛选条件

2、多表的删除【补充】

sql92语法:

delete 表1的别名,表2的别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;

sql99语法:

delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;

方式二:truncate

语法:truncate table 表名;

*/

方式一:delete

1.单表的删除

案例:删除手机号以9结尾的女神信息

DELETE FROM beauty WHERE phone LIKE '%9';
SELECT * FROM beauty;

2.多表的删除

案例:删除张无忌的女朋友的信息

DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';

案例:删除黄晓明的信息以及他女朋友的信息

DELETE b,bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黄晓明';

方式二:truncate语句

案例:将魅力值>100的男神信息删除

TRUNCATE TABLE boys ;

delete pk truncate【面试题★】

/*

  • 1.delete 可以加where 条件,truncate不能加

  • 2.truncate删除,效率高一丢丢

  • 3.假如要删除的表中有自增长列,
    如果用delete删除后,再插入数据,自增长列的值从断点开始,
    而truncate删除后,再插入数据,自增长列的值从1开始。

  • 4.truncate删除没有返回值,delete删除有返回值

  • 5.truncate删除不能回滚,delete删除可以回滚.

*/

SELECT * FROM boys;

DELETE FROM boys;
TRUNCATE TABLE boys;
INSERT INTO boys (boyname,usercp)
VALUES('张飞',100),('刘备',100),('关云长',100);

相关文章

网友评论

      本文标题:Chapter 13 .数据类型&数据的增删改

      本文链接:https://www.haomeiwen.com/subject/dguxaftx.html