py知识(每日更新) 7.30

sql语句的分类

sql语句的分类
    # DDL : CREATE ALTER DROP
    # DML : SELECT INSERT DELETE UPDATE
    # DCL : GRANT REVOKE                 

常用sql语句

    # 库
        # create database 库名;
        # use 库名
        # show tables;
    # 表
        # create table 表名(字段名 类型(长度),...);
        # desc 表名;
        # show create table 表名;
        # alter table 表名 rename 新表名;
        # drop table 表名;
    # 数据
        # insert into 表名 values (值1,值2,值3),(值1,值2..)....;
        # delete from 表名 where 条件
        # select * from 表 where 条件
        # update 表名 set 字段名=新的值 where 条件

mysql中存储引擎

mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。

常用存储引擎

InnoDB

用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。

MyISAM

如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。

Memory

将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。

查看当前的默认存储引擎:

mysql> show variables like "default_storage_engine";
# 在建表时指定
mysql> create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM;
mysql> create table country(id int(4),cname varchar(50)) ENGINE=InnoDB;
也可以使用alter table语句,修改一个已经存在的表的存储引擎。
mysql> alter table ai engine = innodb;
# 在配置文件中 my.ini文件
[mysqld]
default-storage-engine=INNODB

表的创建

#语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的

查看表结构

desc staff_info;
show create table staff_info

mysql表支持的数据类型

数值类型

MySQL支持所有标准SQL数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
类型 大小 范围(有符号) 范围(无符号)unsigned约束 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 float(255,30) (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值
DOUBLE 8 字节 double(255,30) (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 double(65,30) 依赖于M和D的值 依赖于M和D的值 小数值

日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

类型 大小 (字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 年月日
TIME 3 ‘-838:59:59‘/‘838:59:59‘ HH:MM:SS 时分秒
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 年月日时分秒
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

enum和set类型

ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示。ENUM只允许从值集合中选取单个值,而不能一次取多个值

SET和ENUM非常相似,也是一个字符串对象,里面可以包含0-64个成员。根据成员的不同,存储上也有所不同。set类型可以允许值集合中任意选择1或多个元素进行组合。对超出范围的内容将不允许注入,而对重复的值将进行自动去重。

类型 大小 用途
ENUM 对1-255个成员的枚举需要1个字节存储; 对于255-65535个成员,需要2个字节存储; 最多允许65535个成员。 单选:选择性别
SET 1-8个成员的集合,占1个字节 9-16个成员的集合,占2个字节 17-24个成员的集合,占3个字节 25-32个成员的集合,占4个字节 33-64个成员的集合,占8个字节 多选:兴趣爱好

mysql表的完整性约束

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

  约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:

# NOT NULL :非空约束,指定某列不能为空;
# UNIQUE : 唯一约束,指定某列或者几列组合不能重复
# PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录
# FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性

NOT NULL

是否可空,null表示空,非字符串
not null - 不可空
null - 可空

DEFAULT

约束某一列不为空,如果这一列中经常有重复的内容,就需要我们频繁的插入,这样会给我们的操作带来新的负担,于是就出现了默认值的概念。

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

设置严格模式

设置严格模式:
    不支持对not null字段插入null值
    不支持对自增长字段插入”值
    不支持text字段有默认值

直接在mysql中生效(重启失效):
mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

配置文件添加(永久生效):
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

UNIQUE

唯一约束,指定某列或者几列组合不能重复

# 联合唯一
create table service(
id int primary key auto_increment,
name varchar(20),
host varchar(15) not null,
port int not null,
unique(host,port) #联合唯一;
# 使两列算在一起进行唯一校验.

auto_increment

# 自增 针对int
# 自带 not null
# 前提 : 需要设置unique
自增一般使用在主键中,使用自增后,如果不增加列中的数据,就会按照1,2,3,4的数据自行添加

PRIMARY KEY

主键为了保证表中的每一条数据的该字段都是表格中的唯一值。换言之,它是用来独一无二地确认一个表格中的每一行数据。
主键可以包含一个字段或多个字段。当主键包含多个栏位时,称为组合键 (Composite Key),也可以叫联合主键。
主键可以在建置新表格时设定 (运用 CREATE TABLE 语句),或是以改变现有的表格架构方式设定 (运用 ALTER TABLE)。
主键必须唯一,主键值非空;可以是单一字段,也可以是多字段组合。

FOREI KEY

#表类型必须是innodb存储引擎,且被关联的字段,即references指定的另外一个表的字段,必须保证唯一
create table department(
id int primary key,
name varchar(20) not null
)engine=innodb;
#dpt_id外键,关联父表(department主键id),同步更新,同步删除
create table employee(
id int primary key,
name varchar(20) not null,
dpt_id int,
foreign key(dpt_id)
references department(id)
on delete cascade  # 级连删除
on update cascade # 级连更新
)engine=innodb;
#先往父表department中插入记录
insert into department values
(1,'教质部'),(2,'技术部'),(3,'人力资源部');

#再往子表employee中插入记录
insert into employee values
(1,'yuan',1),(2,'nezha',2),(3,'egon',2),(4,'alex',2),(5,'wusir',3),(6,'李沁洋',3),(7,'皮卡丘',3),(8,'程咬金',3),(9,'程咬银',3);
#删父表department,子表employee中对应的记录跟着删
#更新父表department,子表employee中对应的记录跟着改

FOREIGN KEY

外键约束
# 约束的字段至少unique
# 级联删除 on delete cascade
# 级联更新 on update cascade

create table class3(
   id int primary ,
   cname char(12) not null unique,
   start_date date,
   period char(12),
   course char(12),
   teacher char(12)
 );

create table student3(
   id int primary key auto_increment,
   name char(12) not null,
   gender enum('male','female'),
   cid int,
   foreign key(cid) references class3(id) on delete cascade on update cascade
 );

原文地址:https://www.cnblogs.com/lyoko1996/p/11328886.html

时间: 2024-08-04 16:21:40

py知识(每日更新) 7.30的相关文章

py知识(每日更新) 6.18

万能传参 #当给函数传入的参数数目不定时,之前的穿饭餐方式解决不了问题 #万能参数//动态参数*args 将实参角度: 定义一个函数时* 所有位置参数聚合到一个元祖中. # **kwargs 函数定义是:**讲实参角度所有的关键字参数聚合成一个字典 * 的魔性用法: def func(*args,**kwargs): print(args) print(kwatgs) l1 = [1,2,3] l2 = ["阿萨德","去去去"] 函数形参角度的形参顺序 位置参数&

py知识(每日更新) 7.1

包的使用 第一类: ? 执行文件 通过import导入包以及包内的功能 ? 创建一个aaa的包,自行创建一个__init__py文件 ? 创建一个包会发生三件事儿: ? 1.将以XXX包内的__init__py文件加载到内存中 ? 2.创建一个以XXX命名的名称空间. ? 3.通过XXX . 的当时引用__init__的所有的名字. import aaa # 如何在当前文件中,引用aaa包的bbb包? 1.在执行文件写入 import aaa 2. aaa的__init__ 里面写 from a

py知识(每日更新) 8.7

html - 块级标签 列表 ul 无序列表 属性type:disc(默认)\square(实心方形)\circle(空心圆)\none(不显示样式) <!--设置不显示任何样式--> <ul type="none"> <li>手机</li> <li>电脑</li> <li>其他电器</li> </ul> <!--设置显示实心方块--> <ul type=&qu

py知识(每日更新) 7.26

阻塞,非阻塞,异步,同步与协程 1.阻塞,非阻塞 1.1进程或线程在运行中表现的状态: ①阻塞 ②运行 ③就绪 1.2阻塞: 进程或线程遇到IO阻塞. 程序遇到IO立马会停止(挂起), cpu马上切换,等到IO 结束之后,在执行. 1.3非阻塞: 进程或线程没有IO或者 遇到IO通过某种手段让cpu去执行其他的任务,尽可 能的占用cpu. 2.异步,同步 站在任务发布的角度. 2.1同步 可以从两个方面去看: ①进程或线程间存在间接地相互制约关系 例如有一台打印机,进程A获取这台打印机后,进程B

py知识(每日更新) 6.5

1整数 int 计算和比较 a.bit_length() #求十进制数转换为二进制时所占用的位数 2布尔值 bool True 真 False 假 数字转成布尔值: 0 False 非0 True 字符串转换成布尔值: 空字符串 "" False 非空 True 布尔值转换成数字 True = 1 False = 0 布尔值转换成字符串 True = str(True) False = str(False) 3字符串 作用:存储少量数据 索引(下标):从左向右 0, 1, 2, 3;;

py知识(每日更新) 6.13

文件操作初识 f = open("文件",mode="模式",encoding="编码") open() #调用操作系统打开文件 mode #对文件的操作方式 encoding #文件的编码 ? #不写indocing 默认为系统编码 Windows--gbk ? #linux&mac ----utf-8 f 文件句柄 ---- 操作文件的锅把 文件操作怎么用? 读 r rb r+ r+b r 读 r+ 读写 #后期开发中使用频率比较低

py知识(每日更新) 7.2

collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和OrderedDict等. 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要用来计数 4.OrderedDict: 有序字典 5.defaultdict:

py知识(每日更新) 7.16

socket套接字 五层协议:从传输层包括传输层以下,都是操作系统版主我们封装的各种head 套接字:他存在于传输层与应用层之间的抽象层 ? 1.避免你学习各层的接口以及协议的使用 socket已经封装好了所有的接口.直接使用这这些接口或者方法即可,提升开发效率. ? 2.在Python中socket就是一个模块.通过调用模块中已经实现的方法建立两个进程之间的通信. 单个客户端通讯 # client端 import socket # 1. 创建socket对象 phone = socket.so

py知识(每日更新) 7.12

反射 通过字符串去操作一个对象 字符串: 字符串类型 对象: 实例,类,当前文件(模块),其他模块 hasattr() # getattr() # setattr() # 增 delattr() # 删 函数VS方法 1.通过函数名可以大致判断 print(func) print(obj.func) 2.通过模块types模块去验证 from types import FunctionType from types import MethodType print(isinstance(func,