mysql创建表

MySQL常见面试题索引与表设计

丶灬走出姿态 提交于 2019-11-28 17:53:31
1 索引概念、索引模型 Q: 你们每天这么大的数据量,都是保存在关系型数据库中吗? A: 是的,我 们线上使用的是MySQL数据库 Q: 每天几百万数据,一个月就是几千万了,那你们有没有对于查询做一些优化呢? A: 我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话) Q: 那你能说说什么是索引吗? A: 索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据 Q: 那么索引具体采用的哪种数据结构呢? A: 常见的MySQL主要有两种结构: Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树 Q: 既然你提到InnoDB使用的B+ 树的索引模型,那么你知道为什么采用B+ 树吗?这和Hash索引比较起来有什么优缺点吗? A: 因为Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。 所以,哈希索引只适用于等值查询的场景。 而B+ 树是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描 Q: 除了上面这个范围查询的,你还能说出其他的一些区别吗? A: B+ Tree索引和Hash索引区别? 哈希索引适合等值查询,但是无法进行范围查询

MySQL多表查询

跟風遠走 提交于 2019-11-28 17:30:38
准备 建表与数据准备 #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); #插入数据 insert into department values (200,'技术'), (201,'人力资源'), (202,'销售'), (203,'运营'); insert into employee(name,sex,age,dep_id) values ('egon','male',18,200), ('alex','female',48,201), ('wupeiqi','male',38,201), ('yuanhao','female',28,202), ('liwenzhou','male',18,200), ('jingliyang','female',18,204) ; #查看表结构和数据 mysql> desc department; +-------+-------------+------+-----+---------

MySQL表的完整性约束

断了今生、忘了曾经 提交于 2019-11-28 17:18:13
目录 阅读目录 概览 NOT NULL DEFAULT UNIQUE PRIMARY KEY AUTO_INCREMENT FOREIKEY 阅读目录 概览   为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。   约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 # FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性 返回顶部 NOT NULL 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 mysql> create table t12 (id int not null); Query OK, 0 rows affected (0.02 sec) mysql> select * from t12; Empty set (0.00 sec) mysql> desc t12; +-------+---------+------+-----+---------+-

MySQL表的CRUD及多表查询

南笙酒味 提交于 2019-11-28 16:42:44
数据库表的增删改查操作:     增 、 删 、 改   查:      单表查询        简单查询 、 where约束 、 group by分组 、 聚合查询 、 having过滤 、 order by排序 、 limit限制 、 正则匹配      多表查询        连表查询 : 交叉查询 、 >內连查询 、 左外连接查询 、 右外连接查询 、 全外链接查询 、 连接结果筛选查询                 子查询  : 带关键字in的子查询 、 带比较运算符的子查询 、 带关键字exists的布尔判断结果查询   表记录增删改总结: MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据以及。    #增insert into: (1)单条插入 insert into 表名 value(值1,值2,...); (2)多条插入 insert into 表名 values(值1,值2,...),(值1,值2,...),...; (3)指定字段插入 insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...); (4)查询结果插入 insert into

mysql基础_操作数据库以及表

偶尔善良 提交于 2019-11-28 16:03:55
1.数据库的操作 create database 数据库名;#一般创建方式 create database 数据库名 default charset utf8;#数据库编码格式为utf-8 show databases;#查看所有数据 drop database 数据库名;#删除数据库 use 数据库名;#进入数据 2.表的操作 show tables;#查看所有的表 create table t1( id int,#列名 数据类型 name char(10),#列名 数据类型 );#创建表 create table t1( id int,name char(10) ) default charset=utf8;#创建utf-8编码格式的表 create table t1( id int, name char(10) ) engine=innodb default charset=utf8;#创建utf-8编码格式的表,并且支持事务,原子性操作.   (1)创建表      create table t1( 列名 类型 null;#null表示可以为空 列名 类型 not null;#null表示不能为空 列名 类型 not null aoto_increment primary key;#aoto_increment和primary key搭配实现自增 )engine

【MySQL】单表查询

删除回忆录丶 提交于 2019-11-28 15:21:49
原文: http://blog.gqylpy.com/gqy/251 目录 where 约束 group by 分组查询 聚合函数 having 过滤 order by 查询排序 limit 限制查询的记录数 # 语法select 字段1, 字段2 ... from 表名 where 条件 group by field having 筛选 order by field limit 限制条数 重点在于关键字的执行优先级: from where group by having select distinct order by limit 1. 找到表:from 2. 拿着where指定的约束条件,去文件(表)中取出一条条记录 3. 将取出的一条条记录进行分组group by,如果没有group by, 则整体作为一组 4. 将分组的结果进行having过滤 5. 执行select 6. 去重 7. 将结果按条件排序:order by 8. 限制结果的显示条数 company.employee 员工id id int 姓名 name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment     varchar 薪水 salary     double 办公室 office

MySQL用户、库、表操作

走远了吗. 提交于 2019-11-28 15:08:46
用户及权限操作:   管理员登录:mysql -uroot -p 用户设置密码:set password=password(密码); 查看数据库所有用户:select * from mysql.user; 查看用户权限:show grants for 用户名@网络地址 [identified by 密码] 普通用户登录:mysql -u用户名 -h网络地址 -p 查看当前用户:select user(); 查看当前数据库:select database(); 当前时间:now() 查看当前数据库是否是严格模式:select @@sql_mode; 创建用户:create user 用户名@网络地址 identified by 密码; 用户授权:grant all[SELECT INSERT UPDATE DELETE] on 数据库名.表名 to 用户名@网络地址(%表示所有) identified by 用户密码; 取消授权:revoke all[SELECT INSERT UPDATE DELETE ] on 数据库名.表名 from 用户名@网络地址 [identified by 密码]; 修改普通用户密码:set password for 用户名=password(密码); 查看当前用户权限:show grants; mysql用户管理基础操作 库操作:   查看数据库:

Mysql 建表时报错 invalid ON UPDATE clause for 'create_date' column

纵饮孤独 提交于 2019-11-28 14:09:01
原文: Mysql 建表时报错 invalid ON UPDATE clause for 'create_date' column 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangrui1037102215/article/details/79377418 这个错误是由于mysql 版本问题导致的 `create_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 这是建表语句。 MySQL 5.5 每个表只允许一个列的默认值根据时间戳生成时间 可以查看一下mysql的版本号: show variables like 'innodb_version'; 来源: https://www.cnblogs.com/lonelyxmas/p/9584579.html

Mysql 建表时报错 invalid ON UPDATE clause for 'create_date' column

倾然丶 夕夏残阳落幕 提交于 2019-11-28 14:08:54
这个错误是由于mysql 版本问题导致的 `create_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 这是建标语句。MySQL 5.5 每个表只允许一个列的默认值根据时间戳生成时间 可以使用触发器来替代一下: CREATE TABLE `example` ( `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `lastUpdated` DATETIME NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; DROP TRIGGER IF EXISTS `update_example_trigger`; DELIMITER // CREATE TRIGGER `update_example_trigger` BEFORE UPDATE ON `example` FOR EACH ROW SET NEW.`lastUpdated` =

MySQL-单表查询

一曲冷凌霜 提交于 2019-11-28 13:17:50
1.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 2.关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤 5.执行select 6.去重 7.将结果按条件排序:order by 8.限制结果的显示条数 3.简单查询 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment varchar 薪水 salary double 办公室 office int 部门编号 depart_id int # 创建表 create table employee( id int not null unique auto_increment,