当前位置:Gxlcms > 数据库问题 > mysql小结

mysql小结

时间:2021-07-01 10:21:17 帮助过:5人阅读

1、搜索引擎 1.InnoDB:支持事务、行级锁、外键,保持事务的完整性,在修改数据的效率比较快 MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。 InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。 2.MyISAM:表级锁,查询速度快,但是插入和修改效率慢 MyISAM既不支持事务、也不支持外键、其优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。 3.Memory:数据都存在内存中,处理数据的速度快,但是对内存要求高,重启服务和断电消失 在内存中存储所有数据,应用于对非关键数据由快速查找的场景。Memory类型的表访问数据非常快,因为它的数据是存放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失, 长用于数据量小的数据库,并对服务器的内存有要求,一般应用于每个用户的登录状态。 4.BLACKHOLE:放进去的所有数据都不会存储,但有一个日志记录着插入的数据,利用日志分流数据 黑洞存储引擎,类似于 Unix 的 /dev/null,Archive 只接收但却并不保存数据。对这种引擎的表的查询常常返回一个空集。这种表可以应用于 DML 语句需要发送到从服务器,但主服务器并不会保留这种数据的备份的主从配置中。 2、相关sql语句 1.查看当前的默认存储引擎: mysql> show variables like "default_storage_engine"; 2.查询当前数据库支持的存储引擎 mysql> show engines \G; 8、指定存储引擎建表 1.在建表时指定 mysql> create table t1(id int,name varchar(20)) ENGINE=MyISAM; mysql> create table country(id int,cname varchar(50)) ENGINE=InnoDB; 2.也可以使用alter table语句,修改一个已经存在的表的存储引擎。 mysql> alter table country engine = MyISAM; 9、在配置文件中指定 #my.ini文件 [mysqld] default-storage-engine=INNODB 三、各种定义语言的区别 DDL语句数据库定义语言:操作的是数据库、表的结构、视图、索引、存储过程 1create:创建 create database 数据库名 charset utf8; // 创建数据库 create table 表名(id int,name char); // (列名1 数据类型,列名2,数据类型...) 这个是创建表和表头,还没有内容的 2alter:跟新 alter database 数据库名 charset latin1(要修改的内容); // 修改数据库 ALTER表的操作 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…]; 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段:modify 修改数据类型和约束,change修改字段名并重新定义数据类型和约束 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…]; 5.修改字段排列顺序/在增加的时候指定字段位置 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 放在首位 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 在某个字段后 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…] AFTER 字段名; 6.增加/删除约束 ALTER TABLE 表名 ADD PRIMARY KEY (字段); ALTER TABLE 表名 ADD UNIQUE (字段); ALTER TABLE 表名 DROP PRIMARY KEY; 3drop:删除 drop database 数据库名; // 删除数据库 drop table 表名; // 删除表 4、show/desc:查询 show databases; // 查询所有的数据库 show tables; // 查询所有表 desc 表名; // 查看表的结构 describe 表名; //查看表的结构 show create table 表名 \G; 查看当前表更详细的信息 DML语句数据库操纵语言: 操作的是表的具体的记录 1insert:插入数据 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 语法二: INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定字段插入数据 语法: INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…); 3. 插入多条记录 语法: INSERT INTO 表名 VALUES (值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n); 4. 插入查询结果 语法: INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …; 2update:跟新数据 语法: UPDATE 表名 SET 字段1=值1,字段2=值2,WHERE CONDITION; 示例: UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’; 注:mysql库的user表存储的是用户的信息 3delete:删除数据 语法: DELETE FROM 表名 WHERE CONITION; 示例: DELETE FROM mysql.user WHERE password=’’; 4select:查询数据 查看所有列的数据 select * from staff_info; 查看指定列的数据 select name,age from staff_info; 4-1单表查询语法 SELECT [DISTINCT] 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY 字段 HAVING 筛选 ORDER BY 字段[ASC/DESC] LIMIT 限制条数 1、关键字执行的优先级 1.找到表:from 2.拿着where指定的约束条件,去表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤 5.执行select 6.distinct去重 7.将结果按条件排序:order by 8.限制结果的显示条数 DCL语句数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE 1、权限:: usage 无权限 all 全部权限 selectcreatedrop2、授权具体语句:grant 权限 on 库.表 to 用户 mysql> grant all on *.* to ming@%; # all表示授予所有权限,第一个*代表所有库,第二个*代表所有表,ming@%代表用户和客户端主机,%代表任意主机 mysql> grant select on db1.* to ming@localhost; # select代表只给查的功能,db1.* 代表库db1的所有表,localhost代表本地主机 # 给未存在的用户授权,会创建再授权 mysql> grant all on *.* to dong@% identified by 123456 # 创建账号并授权 # 刷新权限 mysql> flush privileges; # 刷新使授权立即生效 # 查看用户权限 show grants for ming@%; 3、回收权限:revoke 权限 on 库.表 from 用户 mysql> revoke select on *.* from ming@%; 其他SQL语句: 1、 启动server端 - 可以在service服务中操作,也可以打开cmd窗口 > net start mysql 2、停止服务 - 可以在service服务中操作,也可以打开cmd窗口 > net stop mysql 3、登录用户 > mysql -u root -p # mysql5.6默认是没有密码的,遇到password直接按回车键 4、查看所有的库 mysql> show databases; 5、查看当前用户 mysql> select user(); 6、查看当前使用的数据库 mysql> select database(); 7、退出当前用户 mysql> exit # 也可以用\q或者quit退出 8、给当前用户设置密码 mysql> set password = password(newpassword); 9、给其他用户设置密码 mysql> set password for username@host = password(newpassword) 10、在输入sql语句的过程中 如果想要放弃本条语句 mysql> \c 11、创建账号 # %表示这个网段内所有ip都可以连接,identified by 123表示给这个用户设置密码123 mysql> create user ming@192.168.16.% identified by 123; mysql> create user ming@192.168.16.5 # 表示某机器可以连接 mysql> create user ming@% # 表示所有机器都可以连接 12、远程登陆 mysql> mysql -u ming -p123 -h 192.168.16.31 # u是user p是password h是localhost的ip地址 13、使用某个数据库(切换到文件夹) use 数据库名; 14、交叉连接:不适用任何匹配条件。生成笛卡尔积 mysql> select * from employee,department; 15、内连接:只连接匹配的行 说明: 找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果 department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来 mysql> select employee.id,employee.name,employee.age,employee.sex,department.name from employee inner join department on employee.dep_id=department.id; 16、外链接之左连接:优先显示左表全部记录 说明: 以左表为准,即找出所有员工信息,包括没有部门的员工 本质就是:在内连接的基础上增加左表有而右表没有的结果 mysql> select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id; 17、外链接之右连接:优先显示右表全部记录 说明: 以右表为准,即找出所有部门信息,包括没有员工的部门 本质就是:在内连接的基础上增加右表有而左表没有的结果 mysql> select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id; 18、全外连接:显示左右两个表全部记录 说明: 在内连接的基础上增加左表有右表没有的和右表有左表没有的结果 注意:mysql不支持全外连接 FULL JOIN 但是:mysql可以使用UNION这种方式间接实现全外连接,需要注意的是union与union all的区别:union会去掉相同的纪录 select * from employee left join department on employee.dep_id=department.id union select * from employee right join department on employee.dep_id=department.id;

 

mysql小结

标签:red   taf   主服务器   企业   没有   客户   int   设置密码   文件   

人气教程排行