库、表、记录、相关操作(1)

数据库配置

  1. # 通过配置文件统一配置的目的:统一管理 服务端(mysqld) 、客户端(client)
  2. # 配置了 mysqld(服务端) 的编码为utf8,那么再创建的数据库,默认编码都采用utf8
  3. # 配置流程
  4. # 1)在mysql安装根目录下,创建配置文件:my.ini
  5. # mac下配置文件名叫 my.cnf
  6. # 2)设置配置文件内容并保存
  7. [mysqld] # 服务器配置
  8. port=3306 # 可以修改数据库默认端口(如果数据库端口被其他软件占用)
  9. character-set-server=utf8 # 编码格式
  10. collation-server=utf8_general_ci # 排序方式(默认跟编码格式走)
  11. [client] # mysql自己的客户端叫[mysql],配置[client]即配置了[mysql],也配置了其他存在方式的客户端,比如Navicat可视化客户端
  12. default-character-set=utf8 # 编码格式
  13. # 3)重启数据库服务

数据库修改信息

  1. # 修改字符编码
  2. mysql>: alter database 数据库名 charset=编码格式;

用户操作:重点

  1. # 为特定的数据库分配有该数据库 操作权限 的用户
  2. mysql>: grant 权限们 on 数据库.表 to 用户名@'主机名' identified by '密码';
  3. # 1)all:所有权限
  4. # 2)oldboy.*:oldboy数据库下所有表
  5. # 3)oldboy@'localhost':本机可以通过oldboy用户登入
  6. # 4)identified by 'Oldboy123':密码为Oldboy123
  7. eg>: grant all on oldboy.* to oldboy@'localhost' identified by 'Oldboy123';
  8. # 1)select,delete,update,insert,drop,alter:指定的权限
  9. # 2)oldboy.*:oldboy数据库下所有表
  10. # 3)oldboy@'%':任何机器可以通过oldboy用户登入
  11. # 4)identified by 'Oldboy123':密码为Oldboy123
  12. eg>: grant select,delete,update,insert,drop,alter on oldboy.* to oldboy@'%' identified by 'Oldboy123';
  13. # 撤销权限
  14. mysql>: revoke 权限1,权限2,... on 数据库名.表名 from 用户名@'主机名';
  15. # 禁掉本地oldboy用户对oldboy数据库的所有表的drop权限
  16. eg:> revoke drop on oldboy.* from oldboy@'localhost';
  17. # 删除用户
  18. drop user 用户名@'主机名';

表的修改

  1. # 修改表名
  2. mysql>: alter table 旧表 rename 新表;
  3. # 修改字段名
  4. mysql>: alter table 表名 change 旧字段 新字段 类型(长度);
  5. # 修改字段属性
  6. mysql>: alter table 表名 modify 字段 新类型(长度);

创建表的完整语法

  1. # 长度和约束在某些情况下是可以省略的
  2. mysql>: create table 表名 (
  3. 属性名1 类型(长度) 约束,
  4. ...
  5. 属性名n 类型(长度) 约束
  6. ) engine=引擎 default charset=utf8;

数据库表的引擎:驱动数据的方式 - 数据库优化

  1. # 前提: 引擎是建表是规定, 提供给表使用的, 不是数据库
  2. # 展示所有引擎
  3. mysql> show engines;
  4. # innodb(默认): 支持事务, 行级锁, 外键
  5. mysql>: create table t11(id int)engine=innodb;
  6. # myisam: 查询效率要优于innodb, 当不需要支持事务, 行级锁, 外键, 可以通过设置myisam来优化数据库
  7. mysql>: create table t12(id int)engine=myisam;
  8. # blackhole:黑洞,存进去的数据都会消失(可以理解不存数据)
  9. mysql>: create table t13(id int)engine=blackhole;
  10. # memory:表结构是存储在硬盘上的,但是表数据全部存储在内存中
  11. mysql>: create table t14(id int)engine=memory;

数据库的模式

  1. # mysql 5.7 以后默认都是安全模式
  2. # mysql 5.6 版本
  3. sql_model=no_engine_substitution # 非安全性,默认
  4. sql_model=strict_trans_tables # 安全性
  5. # 查看当前数据库模式:
  6. show variables like "%sql_mode%"; # %匹配0~n个任意字符 => 模糊查询
  7. # 临时设置为安全模式,服务重启后会被重置
  8. mysql>: set global sql_mode="strict_trans_tables"; # 在root用户登录状态下
  9. # 在设置后,quit断开数据库连接后(服务器不重启)就会进入安全模式
  10. # 安全模式下,非安全模式下sql执行的警告语句,都会抛异常
  11. eg>: create table t1(name char(2));
  12. eg>: insert into t1 values ("ab") # 正常
  13. eg>: insert into t1 values ("owen") # 错误 Data too long for column 'name' at row 1

mysql支持的数据类型

整型

  1. '''类型
  2. tinyint:1字节,取值范围-128~127,默认长度4
  3. smallint:2字节,取值范围 -32768 ~ 32767,默认长度6
  4. mediumint:3字节
  5. int:4字节 -2147483648~2147483647
  6. bigint:8字节
  7. '''
  8. '''约束
  9. unsigned:无符号
  10. zerofill:0填充
  11. '''
  12. # 建表
  13. mysql>: create table tb1(x tinyint, y smallint, z int(6));
  14. # 插入数据
  15. mysql>: insert into tb1 values(128, 32768, 32768); # 结果:127,32767,32768
  16. # 结论:整型的长度由所占字节(取值范围)决定,可以自定义长度,但是不影响所占字节(取值范围)
  17. # 所有整型变量的长度一般都省略不写
  18. 结论>: create table tb1(x tinyint, y smallint, z int);
  19. # 整型约束
  20. mysql>: create table tb2(x tinyint unsigned); # 0~255
  21. mysql>: insert into tb2 values(256), (-1); # 255, 0
  22. # 0填充约束
  23. mysql>: create table tb3(x tinyint unsigned zerofill);
  24. mysql>: insert into tb3 values(10); # 010

浮点型

  1. # 在安全模式下测试浮点型类型
  2. '''类型
  3. float(M, D):4字节,3.4E–38~3.4E+38
  4. double(M, D):8字节,1.7E–308~1.7E+308
  5. decimal(M, D):所在字节M,D大值基础上+2,其实就是M值+2就是decimal字段所占字节数
  6. '''
  7. '''宽度:
  8. 限制存储宽度
  9. (M, D) => M为位数,D为小数位,M要大于等于D
  10. float(255, 30):精度最低,最常用
  11. double(255, 30):精度高,占位多
  12. decimal(65, 30):字符串存,全精度
  13. '''
  14. # 建表:
  15. mysql>: create table tb4 (age float(256, 30)); # Display width out of range for column 'age' (max = 255)
  16. mysql>: create table tb5 (age float(255, 31)); # Too big scale 31 specified for column 'age'. Maximum is 30.
  17. mysql>: create table tb5 (age float(65, 30)); # 在合理取值范围
  18. mysql>: create table t12 (x float(255, 30));
  19. mysql>: create table t13 (x double(255, 30));
  20. mysql>: create table t14 (x decimal(65, 30));
  21. # 1.111111164093017600000000000000
  22. mysql>: insert into t12 values(1.11111111111111111119);
  23. # 1.111111111111111200000000000000
  24. mysql>: insert into t13 values(1.11111111111111111119);
  25. # 1.111111111111111111190000000000
  26. mysql>: insert into t14 values(1.11111111111111111119);
  27. # 重点:长度与小数位分析
  28. # 报错,总长度M必须大于等于小数位D
  29. mysql>: create table t14 (x decimal(2, 3));
  30. # 能存储 -0.999 ~ 0.999,超长度的小数位会才有四舍五入,0.9994可以存,就是0.999,0.9995不可以存
  31. mysql>: create table t14 (x decimal(3, 3)); # 整数位 3 - 3,所以最大为0
  32. # 能存储 -9.999 ~ 9.999,超长度的小数位会才有四舍五入,9.9994可以存,就是9.999,9.9995不可以存
  33. mysql>: create table t14 (x decimal(4, 3)); # 整数位 4 - 3,所以最大为9
  34. # 能存储 -99.999 ~ 99.999,超长度的小数位会才有四舍五入,99.9994可以存,就是99.999,99.9995不可以存
  35. mysql>: create table t14 (x decimal(5, 3)); # 整数位 5 - 3,所以最大为99

字符串:数据库优化 - char效率要高于varchar

  1. '''类型
  2. char:定长,永远采用设置的长度存储数据
  3. varchar:不定长,在设置的长度范围内,变长的存储数据
  4. '''
  5. '''宽度
  6. 限制存储宽度
  7. char(4):存 "a" "ab" "abc" "abcd"都采用4个长度,"abcde" 只能存储前4位(安全模式下报错)
  8. varchar(4):存 "a" "ab" "abc" "abcd"分别采用1,2,3,4个长度存储,"abcde" 只能存储前4位(安全模式下报错)
  9. char就按定长存储,如果数据长度变化大,通常更占空间,但是存取数据按固定定长操作,效率高
  10. varchar存储数据时,会先计算要存储数据的长度,动态变长存储数据,所以一般较省空间,但是计算是需要耗时的,所以效率低
  11. varchar计算出的数据长度信息也是需要开辟空间来存储,存储在数据头(数据开始前)中,也需要额外消耗1~2个字节
  12. 所以如果数据都是固定长度,或是小范围波动,char相比就不会更占空间,且效率高
  13. '''
  14. # 建表:
  15. mysql>: create table ts1 (s1 char(4), s2 varchar(4));
  16. mysql>: insert into ts1 values('adcde', 'xyzabc'); # 'adcd', 'xyza'

时间

  1. '''类型
  2. year:yyyy(1901/2155)
  3. date:yyyy-MM-dd(1000-01-01/9999-12-31)
  4. time:HH:mm:ss
  5. datetime:yyyy-MM-dd HH:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)
  6. timestamp:yyyy-MM-dd HH:mm:ss(1970-01-01 00:00:00/2038-01-19 ??)
  7. '''
  8. # 建表:
  9. mysql>: create table td1 (my_year year, my_date date, my_time time);
  10. mysql>: insert into td1 values(1666, '8888-8-8', '8:8:8'); # 时间需要在取值访问内
  11. mysql>: create table td2 (my_datetime datetime, my_timestamp timestamp);
  12. mysql>: insert into td2 values('2040-1-1 1:1:1', '2040-1-1 1:1:1'); # 时间需要在取值访问内
  13. mysql>: insert into td2(my_datetime) values('2040-1-1 1:1:1'); # timestamp不复制会才有系统当前时间
  14. # datetime:8字节,可以为null
  15. # timestamp:4字节,有默认值CURRENT_TIMESTAMP

枚举与集合

  1. # 枚举与集合:为某一个字段提供选项的 - 枚举只能单选(1个),集合可以多选(0-n个)
  2. # 建表
  3. # enum、set默认值为NULL
  4. mysql>: create table tc1 (name varchar(20), sex enum('男', '女', '哇塞'), hobbies set('男', '女', '哇塞'));
  5. mysql>: insert into tc1 values('ruakei', '哇塞哇塞', '未知');
  6. # enum、set手动设置默认值 '男' 与 '哇塞'
  7. mysql>: create table tc2 (name varchar(20), sex enum('男', '女', '哇塞') default '男', hobbies set('男', '女', '哇塞') default '哇塞');
  8. mysql>: insert into tc2 values('ruakei', '哇塞哇塞', '未知');
  9. mysql>: insert into tc2(name) values('ruakei');
  10. # 对sex、hobbies两个字段赋值错误,系统默认用空字符串填充(非安全模式),安全模式抛异常
  11. # 如果对出sex、hobbies两个字段外的其他字段进行赋值,这两个字段会才有默认值
  12. # 注:对set类型的字段进行赋值,用一个字符串,字符串内部用,将多个选项隔开,且不能添加空格等其他额外字符
  13. mysql>: insert into tc2 values('ruakei_1', '女', '男,女,哇塞');

约束

  1. """
  2. primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一 字段,未标识则创建隐藏字段
  3. foreign key:外键
  4. unique:唯一性数据, 该条字段的值需要保证唯一,不能重复
  5. auto_increment:自增,只能加给key的int类型字段,作为辅助修饰,一个表中只能设置一个自增字段
  6. not null:不为空 - 针对一些字段,如注册时的用户名,出生人的性别等,这些需求下的字段,只不能设置为Null,必须要对其赋值
  7. default:默认值 - 对有默认值意外的字段进行赋值时,有默认值的字段会被赋默认值
  8. unsigned:无符号 - 存储的数字从0开始
  9. zerofill:0填充 - 存整数时数据长度小于取值范围长度,会在数字左方用0填充
  10. """
  11. # not null 与 default 限制
  12. # 不能为空,没有默认值的x,必须赋值
  13. # y、z在没有赋值情况下,才有默认值,设置值后,采用默认值
  14. mysql>: create table td1 (x int not null, y int default 0, z int default 100);
  15. # 报错,auto_increment必须设置给 键字段
  16. mysql>: create table td2 (x int auto_increment);
  17. # 报错,auto_increment必须设置给 int字段
  18. mysql>: create table td2 (x char(4) auto_increment);
  19. # 报错,auto_increment字段最多出现 1次
  20. mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);
  21. # 正确,主键和唯一键分析
  22. # x为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键
  23. mysql>: create table td21 (x int unique auto_increment, y int unique);
  24. # y为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键
  25. mysql>: create table td22 (x int unique, y int unique auto_increment);
  26. # x为主键:设置了主键就是设置的,主键没设置自增,那自增是可以设置在唯一键上的
  27. mysql>: create table td23 (x int primary key, y int unique auto_increment);
  28. # x为主键:设置了主键就是设置的,主键设置了自增,自增字段只能有一个,所以唯一键不能再设置自增了
  29. mysql>: create table td24 (x int primary key auto_increment, y int unique);
  30. # 默认主键:没有设置主键,也没有 唯一自增键,那系统会默认添加一个 隐式主键(不可见)
  31. mysql>: create table td25 (x int unique, y int unique);
  32. # 唯一键:确保一个字段,数据不能重复
  33. # 主键:是一条记录的唯一标识(可以理解为数据的编号)
  34. # 联合唯一
  35. # ip在port不同时,可以相同,ip不同时port也可以相同,均合法
  36. # ip和port都相同时,就是重复数据,不合法
  37. mysql>: create table tu1 (ip char(16), port int, unique(ip, port));
  38. # 也可以设置成 联合主键,道理同 联合唯一
  39. mysql>: create table tu2 (ip char(16), port int, primary key(ip, port));
  40. # sql可以多行书写
  41. mysql>:
  42. create table t22(
  43. ip char(16),
  44. port int,
  45. primary key(ip,port)
  46. );

MySQL 库、表、记录、相关操作(1)的更多相关文章

  1. 二 mysql库表的详细操作

    目录 1.库操作 1.创建数据库 2.数据库相关操作 2.表操作 1.存储引擎 2.表介绍 3.创建表 4.查看表结构 5.MySQL的基础数据类型 6.表的完整性约束 7.修改表 alter tab ...

  2. 对mysql数据库表的相关操作

    虫师博客(Python使用MySQL数据库(新)): https://www.cnblogs.com/fnng/p/3565912.html 1.更改表的结构,增加一个字段放置新增的属性 alter ...

  3. python之路--MySQL 库,表的详细操作

    一 库操作 数据库命名规则 可以由数字,字母,下划线,@, #, $ 区分大小写 唯一性 不能使用关键字如 create  select 不能单独使用数字 最长128位 # 这些是对上次的补充. 二 ...

  4. mysql 库表整体相关查询

    select table_schema,table_name from information_schema.columns where column_name = '字段名'; 查询某张表有几条记录 ...

  5. Mysql 库表操作初识

    Mysql 库表操作初识 终端登录mysql 这里只演示win下, cmd 终端. 至于怎么在win下, linux, mac安装, 感觉这是一个入门级的百度搜索问题, 安装都搞不定, 确实有点尴尬, ...

  6. mysql增删改查相关操作

    mysql增删改查相关操作 以前用mysql用的少,对于数据库相关的操作不熟悉,现在开始要接触数据库了,记录一下相关的基础操作吧. 1.数据库的授权操作 # mysql -u root -p Ente ...

  7. MYSQL--表与表之间的关系、修改表的相关操作

    表与表之间的操作: 如果所有信息都在一张表中: 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性变得极差(致命的缺点) 确立表与表之间的关系.一定要换位思考(必须在两者考虑清楚之后才能得出结论) ...

  8. day40数据库之表的相关操作

    数据库之表的相关操作1.表的操作: 1.创建表的语法:        create table 表名(              id   int(10)   primary key auto_inc ...

  9. python Mysql 库表

    Mysql 库表    创建 学生信息库表  学生成绩 库表

  10. MySQL数据库(四)—— 记录相关操作之插入、更新、删除、查询(单表、多表)

    一.插入数据(insert) 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); # 后面的值必须与字段 ...

随机推荐

  1. element 自定义 el-loading

    前言 虽说,el-loading 自带的loading效果已经满足日常的需求看 但是,美术大大觉得太low  我要我设计的,我不要你觉得我要我觉得 需求 自定义el-loading 正文 从官方需求文 ...

  2. 为什么磁盘慢会导致Linux负载飙升?

    一.CPU利用率和负载率的区别 这里要区别CPU负载和CPU利用率,它们是不同的两个概念,但它们的信息可以在同一个top命令中进行显示.CPU利用率显示的是程序在运行期间实时占用的CPU百分比,这是对 ...

  3. Phpstudy隐藏后门

    Phpstudy隐藏后门 1.事件背景 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache.PHP.MySQL.phpMyAdmin.ZendOptimizer多款 ...

  4. .NET进阶篇06-async异步、thread多线程1

    知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 异步多线程挺大一块内容,既想拆开慢慢学,又想一股脑全倒出.纠结再三,还是拆开吃透,也不至于篇幅过长,劝退许多人 本篇先做一个概述,列明一些基本概 ...

  5. 爬虫之scrapy简单案例之猫眼

    在爬虫py文件下 class TopSpider(scrapy.Spider): name = 'top' allowed_domains = ['maoyan.com'] start_urls = ...

  6. [考试反思]0801NOIP模拟测试11

    8月开门红. 放假回来果然像是神志不清一样. 但还是要接受这个事实. 嗯,说好听点,并列rank#7. 说难听点,垃圾rank#18. 都不用粘人名就知道我是哪一个吧... 因为图片不能太长,所以就不 ...

  7. Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析

    在前面几篇文章中我们主要分析了Mybatis的单独使用,在实际在常规项目开发中,大部分都会使用mybatis与Spring结合起来使用,毕竟现在不用Spring开发的项目实在太少了.本篇文章便来介绍下 ...

  8. Promise对象及它在js中的执行顺序

    关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一 ...

  9. [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  10. mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

    step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// ...