MySQL--基础安装
安装注意事项:
1、先将目录添加到Path中;(解决在CMD运行mysql时不是内部的可运行命令)
2、初始化MySQL(cmd:mysqld --initialize-insecure)(注意mysqld---是数据库服务端)
3、创建服务(cmd: mysql install)
4、启动服务(cmd: net start mysql)
5、关闭服务(cmd: net stop mysql)
测试登录MySQL(cmd: mysql -u root -p)注:首次没有密码 直接回车即可进入数据库;
MySQL--MySQL服务启动错误
这个方法目前适用于初次故障,没重要数据的情况下;相当于重新初始化sql;
首先删除文件目录Data内的所有文件(该目录在mysql的安装目录里,若没有这个目录就自己创建一个;)
-- 适用管理员运行CMD,并通过cd进入到mysql的安装目录中的bin目录 -- 卸载mysql服务 mysqld --remove mysql -- 重新安装mysql服务 mysqld --install mysql -- 重新初始化 mysql --initialize-insecure -- 重新启动mysql服务 net start mysql
MySQL--表的操作
库的操作
-- 创建库 create database 库名 charset utf8;
库的删除
-- 删除库 drop database 库名;
库的使用(进入)
-- 进入库 use 库名;
库的查看
--查看库 show databases ; -- 查看当前用户下的所有库 select database(); -- 查看当前使用的库 show create database 库名; -- 查看创建库的信息
数据库里的注释:--加空格 或者#
表的操作
create table 表名
CREATE TABLE test( id int not NUll auto_increment PRIMARY key, -- 创建一个ID字段,数据类型是int 不为空not null 自动累加 auto_increment 设置为主键 PRIMARY key name VARCHAR(50) NOT NULL, -- 创建一个name字段,数据类型varchar相当于Python的str,后面带字符串长度,不为空notnull sex CHAR(2) NOT NULL -- 创建一个sex字段,数据类型char后面字符串长度,不为空 -- 注意最后一个列名后不应该带逗号 )
varchar 和 char的区别
-- varchar 设定长度后,按实际录入占用大小 -- char 设定长度后,只要不超过设定的长度,占用的长度都是设定的长度,即设定是100,就算你只输入1个字符,依旧占用100个字符
主键 primary key
-- 一个表只能有一个主键,且主键不重复
自动累加 auto_increment
-- 若启动自动累加,则每新加一个数据,自动加1,就算在中间插入一个数据,该数据的序列也是累加后的数字,而不会根据插入的位置产生一个插入位置的序列号; -- 只用用在索引或者主键中
表的查看
select * FROM 表名; -- 查看表数据 desc 表名; -- 查看表结构 show create table 表名; -- 查看表的创建信息
表的删除
drop table 表名;
表的修改
alter table test add age int not null; -- 添加表字段 用到关键字修改 alter+表table+表名+关键字增加add+字段名+数据类型+是否为空 alter table test drop age; -- 删除表字段 alter table test modify name char(100) null; -- modify 修改当前字段的属性,不能改变字段的名称 alter table test change name varchar(50) not null; -- change 修改字段的属性,包括该字段的名称和属性
modify 和 change的区别
-- modify 只能修改字段内的属性,不能改字段名 -- change 可以修改字段的名字和属性
-- 注意事项: -- 字段名 和 数据类型必须紧挨着 -- 数据类型后面的可以不按顺序输入,但是建议按照正常规则填写
添加\删除主键
alter table test add PRIMARY KEY(id); -- 添加主键 alter table test add PRIMARY KEY(id,name); -- 联合主键 alter table test drop PRIMARY KEY; -- 删除主键
主键和联合主键解析
设置默认值default
alter table test alter sex set default '男'; -- 设置默认值 set 设置 alter table test alter sex drop default; -- 删除默认值
表的重命名
RENAME table test to testtable; -- 修改表名
表的复制
create table test select * from testtable; -- 完整的复制一个表,但主键自增、索引、触发器、外键不会被复制 create table test1 select * from testtable where id = '1'; -- 根据条件选择性的将数据内容复制过来 create table test2 like testtable; -- 只复制表结构,数据内容、外键、索引不会被复制,但会复制主键
数据类型
MySQL 支持多种类型,大致可以分为四类:数值、字符串类型、日期/时间、其他类型
MySQL--数据的操作
插入数据insert
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 …;
四种插入数据方式: 一.插入一条数据 insert into student(id,name,age,sex,salary) values(1,'小猪',18,'男',2500); 二.插入多条数据 insert into student(id,name,age,sex,salary) values(1,'小猪',18,'男',2500) ,(2,'小猪2',28,'男',2500),(3,'小猪3',38,'男',2500); 三.直接插入 insert into student values(1,'小猪',18,'男',2500); ps:如果插入的数据个数和位置正好与表的字段个数和位置匹配,则可以省略表名后面的字段定义 四.查询并插入 insert into student(id,name,age) select id,name,age from tb ; ps:从tb表中查询数据并插入到 student表中
代码示例
更新操作update
语法: UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION; 示例: UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
删除操作delete
语法: DELETE FROM 表名 WHERE CONITION; 示例: DELETE FROM mysql.user WHERE password=’’;
方式一: delete from student; ps:删除 student 表中所有的数据,注意:如果有自增主键,主键记录的值不会被删除. 方式二: delete from student where id=1; ps:只删除id 为1的数据. 方式三: truncate student; ps:清空表
代码示例
truncate和delete的区别
1、TRUNCATE 在各种表上无论是大的还是小的都非常快。而DELETE 操作会被表中数据量的大小影响其执行效率. 2、TRUNCATE是一个DDL语言而DELETE是DML语句,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。 3、TRUNCATE不能触发触发器,DELETE会触发触发器。 4、当表被清空后表和表的索引和自增主键将重新设置成初始大小,而delete则不能。
查询操作search
1.单表查询
单表查询(https://www.cnblogs.com/Eva-J/articles/9688313.html)
2.联表查询
多表查询(https://www.cnblogs.com/Eva-J/articles/9688383.html)
-- 关键字 as -- 起别名 -- select name as '姓名' from 表名 distinct -- 去重 -- select distinct 字段名,字段名 from 表名
-- 注意:null 和 空字符 -- null select * from 表名 where 字段名 is null; -- 无法查找出空字符 select * from 表名 where 字段名 is not null; -- 无法查找出空字符 --空字符 select * from 表名 where 字段名 = '' -- 无法查找出null -- 实现同时查找空字符和null select * from 表名 where 字段名 is null or 字段名 = ''
-- 模糊查询 -- 关键字 like 、not like % -- 任意多个字符 _ -- 下划线表示单个字符 -- 一个下划线代表一个占位符
-- 排序查询 -- 关键字 -- order by -- asc --默认使用正序 -- desc --倒叙 select * from 表名 oder by 字段名 desc; # 中文不支持排序,但可以强制中文排序 必须指定一个编码格式UTF8不支持排序要转为GBK select * from 表名 order by convert(字段名 using gbk); -- 解决MySQL中文乱码 -- 先查询使用的是什么编码 show variables like 'char%'; #修改方法: #1. 创建my.ini文件,放在mysql根路径下 #2. 在该文件中添加以下内容即可: #3.添加此文件后需要重新启动服务,以保证此文件生效 ------------------------------------------------------------ [client] default-character-set=utf8 [mysql] #设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 #允许最大连接数 max_connections=200 #服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 #创建新表时将使用的默认存储引擎 default-storage-engine=INNODB #解决mysql在执行sql语句后出现1055错误,sql_mode = only_full_group_by不相容 sql_mode='NO_ENGINE_SUBSTITUTION'