MySQL基础

1-- *************一、mysql基础********************---- 21.1 管理数据库 3 增加: create database 数据库 default character utf8; 4 删除: drop database 数据库; 5 修改: alter database 数据库 default character gbk; 6 查询: show databases / show create database 数据库; 7 81.2 管理表: 9 选择数据库:use 数据库; 10 增加: create table (字段名1 字段类型,字段名2 字段类型......); 11 删除: drop table 表; 12 修改: 13 添加字段: alter table 表 add [column] 字段名 字段类型; 14 删除字段: alter table 表 drop [column] 字段名; 15 修改字段类型: alter table 表 modify 字段名 新的字段类型; 16 修改字段名称 : alter table 表 change 旧字段名 新字段名 字段类型; 17 修改表名称: alter table 表 rename [to] 新表名; 18 查询: 19 show tables / desc student; 20 211.3 管理数据: 22 增加: insert into (字段1,字段2,。。。) values(1,值2.。。。。); 23 删除: delete from 表 where 条件; 24 修改: update 表 set 字段1=1,字段2=2...... where 条件; 25 查询: 26 所有字段: select * from; 27 指定字段: select 字段1,字段2.... from; 28 指定别名: select 字段1 as 别名 from; 29 合并列: select (字段1+字段2) from; 30 去重: select distinct 字段 from; 31 条件查询: 32 a)逻辑条件 :and() or(或) 33 select * from 表 where 条件1 and/or 条件2 34 b)比较条件: > < >= <= = <> between and(在。。。之间) 35 select * from 表 where servlet>=90; 36 c)判空条件: 37 判断null: is null / is not null 38 判断空字符串: ='' / <>'' 39 d)模糊条件: like 40 %: 替换任意个字符 41 _: 替换一个字符 42 分页查询:limit 起始行,查询行数 43 起始行从0开始 44 排序: order by 字段 asc/desc 45 asc: 正序,顺序 46 desc:反序,倒序 47 分组查询:group by 字段 48 分组后筛选: having 条件 49 50-- *************二、SQL语句的分类********************---- 51SQL语句的分类: 52 DDL: 数据定义语言 53 create / drop / alter 54 DML:数据操作语句 55 insert / delete /update / truncate 56 DQL: 数据查询语言: 57 select / show 58 59-- *************三、数据约束********************---- 60-- 3.1 默认值 61CREATE TABLE student( 62 id INT, 63 NAME VARCHAR(20), 64 address VARCHAR(20) DEFAULT '广州天河' -- 默认值 65) 66 67-- 3.2 非空 68-- 需求: gender字段必须有值(不为null69CREATE TABLE student( 70 id INT, 71 NAME VARCHAR(20), 72 gender VARCHAR(2) NOT NULL -- 非空 73) 74 75-- 3.3 唯一 76CREATE TABLE student( 77 id INT UNIQUE, -- 唯一 78 NAME VARCHAR(20) 79) 80 81-- 3.4 主键(非空+唯一) 82CREATE TABLE student( 83 id INT PRIMARY KEY, -- 主键 84 NAME VARCHAR(20) 85) 86 87-- 3.5 自增长 88CREATE TABLE student( 89 id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增长,从0开始 ZEROFILL 零填充 90 NAME VARCHAR(20) 91) 92 93-- 不能影响自增长约束 94DELETE FROM student; 95-- 可以影响自增长约束 96TRUNCATE TABLE student; 97 98-- 3.6 外键约束 99-- 员工表 100CREATE TABLE employee( 101 id INT PRIMARY KEY, 102 empName VARCHAR(20), 103 deptName VARCHAR(20) -- 部门名称 104) 105 106-- 添加员工,部门名称的数据冗余高 107INSERT INTO employee VALUES(1,'张三','软件开发部'); 108INSERT INTO employee VALUES(2,'李四','软件开发部'); 109INSERT INTO employee VALUES(3,'王五','应用维护部'); 110INSERT INTO employee VALUES(4,'陈六','软件开发部'); 111 112-- 解决数据冗余高的问题:给冗余的字段放到一张独立表中 113-- 独立设计一张部门表 114CREATE TABLE dept( 115 id INT PRIMARY KEY, 116 deptName VARCHAR(20) 117) 118 119DROP TABLE employee; 120-- 修改员工表 121CREATE TABLE employee( 122 id INT PRIMARY KEY, 123 empName VARCHAR(20), 124 deptId INT,-- 把部门名称改为部门ID 125 -- 声明一个外键约束 126 CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON UPDATE CASCADE:级联修改 127 -- 外键名称 外键 参考表(参考字段) 128) 129 130INSERT INTO dept(id,deptName) VALUES(1,'软件开发部'); 131INSERT INTO dept(id,deptName) VALUES(2,'应用维护部'); 132INSERT INTO dept(id,deptName) VALUES(3,'秘书部'); 133 134INSERT INTO employee VALUES(1,'张三',1); 135INSERT INTO employee VALUES(2,'李四',1); 136INSERT INTO employee VALUES(3,'王五',2); 137INSERT INTO employee VALUES(4,'陈六',3); 138 139-- 问题: 该记录业务上不合法,员工插入了一个不存在的部门数据 140INSERT INTO employee VALUES(5,'陈六',4); -- 违反外键约束: Cannot add or update a child row: a foreign key constraint fails (`day16`.`employee`, CONSTRAINT `emlyee_dept_fk` FOREIGN KEY (`deptId`) REFERENCES `dept` (`id`)) 141 142-- 1)当有了外键约束,添加数据的顺序: 先添加主表,再添加副表数据 143-- 2)当有了外键约束,修改数据的顺序: 先修改副表,再修改主表数据 144-- 3)当有了外键约束,删除数据的顺序: 先删除副表,再删除主表数据 145-- 修改部门(不能直接修改主表) 146UPDATE dept SET id=4 WHERE id=3; 147-- 先修改员工表 148UPDATE employee SET deptId=2 WHERE id=4; 149 150-- 删除部门 151DELETE FROM dept WHERE id=2; 152-- 先删除员工表 153DELETE FROM employee WHERE deptId=2; 154 155-- 级联修改(修改) 156-- 直接修改部门 157UPDATE dept SET id=5 WHERE id=4; 158 159-- 级联删除 160-- 直接删除部门 161DELETE FROM dept WHERE id=1; 162 163-- **************四、存储过程*******************- 164什么是存储过程 165 存储过程,带有逻辑的sql语句 166存储过程特点 167 1)执行效率非常快!存储过程是在数据库的服务器端执行的!!! 168 2)移植性很差!不同数据库的存储过程是不能移植。 169存储过程语法 170-- 声明结束符 171-- 创建存储过程 172DELIMITER $ 173CREATE PROCEDURE pro_test() 174BEGIN 175 -- 可以写多个sql语句; 176 SELECT * FROM employee; 177END $ 178 179-- 执行存储过程 180CALL pro_test(); 181 182-- 4.1 带有输入参数的存储过程 183-- 需求:传入一个员工的id,查询员工信息 184DELIMITER $ 185CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 输入参数 186BEGIN 187 SELECT * FROM employee WHERE id=eid; 188END $ 189 190-- 调用 191CALL pro_findById(4); 192 193-- 4.2 带有输出参数的存储过程 194DELIMITER $ 195CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20)) -- OUT:输出参数 196BEGIN 197 -- 给参数赋值 198 SET str='helljava'; 199END $ 200 201-- 删除存储过程 202DROP PROCEDURE pro_testOut; 203-- 调用 204-- 如何接受返回参数的值?? 205-- ***mysql的变量****** 206-- 全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用) 207 -- 查看所有全局变量: show variables 208 -- 查看某个全局变量: select @@变量名 209 -- 修改全局变量: set 变量名=新值 210 -- character_set_client: mysql服务器的接收数据的编码 211 -- character_set_results:mysql服务器输出数据的编码 212 213-- 会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失! 214 -- 定义会话变量: set @变量=215 -- 查看会话变量: select @变量 216 217-- 局部变量: 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失!! 218 219-- 1)定义一个会话变量name, 2)使用name会话变量接收存储过程的返回值 220CALL pro_testOut(@NAME); 221-- 查看变量值 222SELECT @NAME; 223 224-- 4.3 带有输入输出参数的存储过程 225DELIMITER $ 226CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT: 输入输出参数 227BEGIN 228 -- 查看变量 229 SELECT n; 230 SET n =500; 231END $ 232 233-- 调用 234SET @n=10; 235CALL pro_testInOut(@n); 236SELECT @n; 237 238-- 4.4 带有条件判断的存储过程 239-- 需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”; 240DELIMITER $ 241CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20)) 242BEGIN 243 IF num=1 THEN 244 SET str='星期一'; 245 ELSEIF num=2 THEN 246 SET str='星期二'; 247 ELSEIF num=3 THEN 248 SET str='星期三'; 249 ELSE 250 SET str='输入错误'; 251 END IF; 252END $ 253 254CALL pro_testIf(4,@str); 255 256SELECT @str; 257 258-- 4.5 带有循环功能的存储过程 259-- 需求: 输入一个整数,求和。例如,输入100,统计1-100的和 260DELIMITER $ 261CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT) 262BEGIN 263 -- 定义一个局部变量 264 DECLARE i INT DEFAULT 1; 265 DECLARE vsum INT DEFAULT 0; 266 WHILE i<=num DO 267 SET vsum = vsum+i; 268 SET i=i+1; 269 END WHILE; 270 SET result=vsum; 271END $ 272 273DROP PROCEDURE pro_testWhile; 274 275CALL pro_testWhile(100,@result); 276 277SELECT @result; 278 279-- 4.6 使用查询的结果赋值给变量(INTO280DELIMITER $ 281CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) ) 282BEGIN 283 SELECT empName INTO vname FROM employee WHERE id=eid; 284END $ 285 286CALL pro_findById2(1,@NAME); 287 288SELECT @NAME; 289 290-- 练习: 编写一个存储过程 291 如果学生的英语平均分小于等于70分,则输出'一般' 292 如果学生的英语平均分大于70分,且小于等于90分,则输出‘良好’ 293 如果学生的英语平均分大于90分,则输出‘优秀’ 294 295DELIMITER $ 296CREATE PROCEDURE pro_testAvg(OUT str VARCHAR(20)) 297BEGIN 298 -- 定义局部变量,接收平均分 299 DECLARE savg DOUBLE; 300 -- 计算英语平方分 301 SELECT AVG(english) INTO savg FROM student2; 302 IF savg<=70 THEN 303 SET str='一般'; 304 ELSEIF savg>70 AND savg<=90 THEN 305 SET str='良好'; 306 ELSE 307 SET str='优秀'; 308 END IF; 309END $ 310 311CALL pro_testAvg(@str); 312 313SELECT @str; 314 315-- ************五、触发器***************** 316触发器作用 317 当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成!! 318SELECT * FROM employee; 319 320-- 日志表 321CREATE TABLE test_log( 322 id INT PRIMARY KEY AUTO_INCREMENT, 323 content VARCHAR(100) 324) 325 326-- 需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据 327-- 创建触发器(添加) 328CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW -- 当往员工表插入一条记录时 329 INSERT INTO test_log(content) VALUES('员工表插入了一条记录'); 330 331-- 创建触发器(修改) 332CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW -- 当往员工表修改一条记录时 333 INSERT INTO test_log(content) VALUES('员工表修改了一条记录'); 334 335-- 创建触发器(删除) 336CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW -- 当往员工表删除一条记录时 337 INSERT INTO test_log(content) VALUES('员工表删除了一条记录'); 338 339 -- ***********六、mysql权限问题**************** 340 -- mysql数据库权限问题:root :拥有所有权限(可以干任何事情) 341 -- 权限账户,只拥有部分权限(CURD)例如,只能操作某个数据库的某张表 342 -- 如何修改mysql的用户密码? 343 -- password: md5加密函数(单向加密) 344 SELECT PASSWORD('root'); -- *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B 345 346-- mysql数据库,用户配置 : user表 347USE mysql; 348 349SELECT * FROM USER; 350 351-- 修改密码 352UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root'; 353 354-- 分配权限账户 355GRANT 权限 ON 数据库. TO '账户名'@'账户类型' IDENTIFIED BY '密码'; 356GRANT SELECT ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456'; 357GRANT DELETE ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '123456'; 358 359-- ****** 七,mysql备份和还原******** 360备份 361 mysqldump -uroot -p demo > c:/bak.sql 362恢复 363 mysql -uroot -p demo < d:/back.sql 364注意:不需要登陆
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

MySQL基础(一)

一、连接MySQL数据库1连接:2mysqlhhostuuserp34常见错误:5ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/tmp/my

MYSQL基础知识小盲区

MYSQL必会的知识新学的MySQL小技能:show PROCESSLIST; 查看当前数据库的进程(也就是正在进行的sql操作)!(https://oscimg.oschina.net/oscnet/c7908995a15dcf322850eb4ba0416cc34b1.png)kil