其他分享
首页 > 其他分享> > day43

day43

作者:互联网

(1)表操作
(2)表数据类型
# 表操作

# use pycharmdata;
# drop table t1;
# create table t1(id int,name varchar(8));
# desc t1;

# 修改字段
# alter table t1 modify id tinyint;           # 修改类型
# alter table t1 change id ID int,change name NAME varchar(10);       # 修改字段名和类型
# desc t1;

# 增加字段
# alter table t1 add gender varchar(4);
# # alter table t1 add gender varchar(4) first ;      # 指定加入到第一行
# alter table t1 add level int after ID;          # 指定加入到某一字段之后
# alter table t1 drop gender;                   # 删除字段

# 复制表
# create table t2 select user,host from mysql.user;         # 将select user,host from mysql.user的结果保存给t2
# 只复制表结构
# create table t3 select user,host from mysql.user where 1!=1;


=======字段类型=======
https://www.cnblogs.com/linhaifeng/articles/7233411.html

# =======================字段类型=======================
# =====整型=====
# tinyint int bigint
# 强调:整型不需指定宽度,整型的宽度是显示宽度,存储宽度是固定的
# create table t(id tinyint);
# desc t;




# =====浮点型=====
# 精度不同(decimal > double > float)
# create table t(x float(255,30),y double(255,30),z decimal(65,30));    # float(总宽度(最大255位),小数位宽度(最大30位)) #(double和float范围一样)
# insert t values(1.111111111111111111111111111111,1.111111111111111111111111111111,1.111111111111111111111111111111);





# =====日期类型=====
# year(年)   time(时分秒)   date(年月日)   datetime(年月日时分秒)    timestamp(年月日时分秒)
# datetime 默认值为null,timestamp 默认值为当前时间current_timestamp
# create table t(y year,t time,d date,dt datetime,ts timestamp);
# insert t values(now(),now(),now(),now(),now());
# ex:
# create table student(
#     id int,
#     name char(10),
#     born_year year,
#     bitrh date,
#     reg_time datetime
# );
#
# insert student values(1,"aaa","1911","1911-11-11","1911-11-11 11:11:11");
# insert student values(2,"bbb","1988","19881111","19881111111111");
# select * from student;
#
# timestamp应该用于记录更新时间
# 注意:针对datetime或者timestamp如果是用作注册时间,那么指定not null default now()自动填充时间即可,如果是用作更新时间那么需要额外指定on update now(),该配置timestamp自带
# create table t(
#     id int,
#     name varchar(16),
#     update_time timestamp,      -- update_time datetime not null default now() on update now()
#     reg_time datetime not null default now()
# );
# insert into t(id,name) values(1,"aaa");
# select * from t;
# update t set name="AAA" where id=1;           # update_time会发生改变,reg_time不变
# select * from t;

        YEAR
            YYYY(1901/2155)
        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)
        TIME
            HH:MM:SS('-838:59:59'/'838:59:59')
        DATETIME
            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)
        TIMESTAMP
            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)        
在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。
1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。
3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

# =====字符类型=====
# char 定长,不够则补全空格
#     特点:
#         浪费空间
#         读取速度快
#
# varchar 变长,预留1-2bytes来存储真实数据的长度
#     特点:
#         节省空间
#         读取速度慢
# ps:当存储的数据量刚好达到存储宽度限制时,其实varchar更费空间
#
# 总结:大多数情况下存储的数据量都达不到宽度限制,所以大多数情况下varchar更省空间
# 但省空间不是关键,关键是省空间 会带来io效率的提升,进而提升了查询效率
# create table t11(x char(5));
# create table t12(x varchar(5));
# insert t11 values("hel ");
# insert t12 values("hel ");
# set sql_mode = "pad_char_to_full_length";   # 临时设置,为下面显示字符实际字符个数
# select char_length(x) from t11;     # char_length()查看字符个数
# select char_length(x) from t12;
# select length(x) from t11;          # length()查看字节个数
# select length(x) from t12;
# 1. char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形
# 2. 虽然 CHAR 和 VARCHAR 的存储方式不太相同,但是对于两个字符串的比较,都只比较其值,忽略 CHAR 值存在的右填充,即使将 SQL _MODE 设置为 PAD_CHAR_TO_FULL_LENGTH 也一样,,但这不适用于like





# =====枚举类型和集合类型=====
# 枚举类型enum("a","b","c","d")     多选一
# 集合类型set("a","b","c","d")      多选多
#
# CREATE TABLE shirts (
#     name VARCHAR(40),
#     size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
# );
# INSERT INTO shirts(name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
# select * from shirts;
# 
# CREATE TABLE user (
#     name VARCHAR(16),
#     hobbies set("read","smoke","drink","tang")
# );
# insert user values("aaa","tang,smoke");
# insert user values("bbb","play");           # 若传的值不在集合中,那么字段下就没有值
# select * from user;

 

标签:create,t1,user,table,now,day43,select
来源: https://www.cnblogs.com/bronya/p/13604290.html