MySQL

xiaoxiao2021-02-28  125

清---cls DOS命令清屏 mysqld --install //安装mysql mysqld --initialize-insercure  --user=mysql  //创建root 用户 密码为空 并且在创建data文件夹 --mysql 简单登入 --回车 mysql -uroot -proot --mysql 带端口号登入 默认端口号3306可以省略 mysql -uroot -proot -P3306 --mysql 带端口号和主机号登入 本地主机可以省略,如果是远程服务器主机名不能省略 mysql -uroot -proot -P3306 -hlocalhost --mysql 退出 \quit \q --命令窗口中文乱码  set names gbk; ---SQL语句:结构化查询语句 --(1)DDL 创建数据命令,创建数据库,创建表 --  创建(CREATE || create)  修改(ALTER || alter) 删除(DROP || drop) --(2)DML 操作数据命令,对表中数据的增删改 --  增(INSERT || insert)  删(DELETE || delete) 改(UPDATE || update) --(3)DQL 查询数据操作,对表中数据查找 --  查(SELECT || select) --(4)DCL 控制数据命令,给用户赋予权限(GRANT || grant) 及撤消权限(REVOKE || revoke) -- delimiter 可以修改分隔符;(默认分隔符 ; ) -- 修改数据库编码 ALTER DATABASE php1702 [DEFAULT] CHARSET=gbk; -- 打开数据库 USE -- 查看当前打开的数据库 SELECT DATABASE(); -- mysql数据类型 -- 1.整型 -- (1)tinyint([M]) unsigned | zerofill -- 大小   1字节 (2^8 8bit) -- 范围   有符号位 -128~127   无符号位(unsigned正数):0~256 -- (2)smallint([M]) unsigned | zerofill -- 大小   2字节 (2^16) -- 范围   有符号位 -32768~32767   无符号位(unsigned正数):0~65535 -- (3)mediumint([M]) unsigned | zerofill -- 大小   3字节 (2^24) -- 范围   有符号位 -83886508~83886507   无符号位(unsigned正数):0~16777215 -- (4)int([M]) unsigned | zerofill -- 大小   4字节 (2^32) -- 范围   有符号位 -2147483648~2147483647   无符号位(unsigned正数):0~4294967295 -- (5)bigint([M]) unsigned | zerofill -- 大小   8字节 (2^64) -- 字段属性 -- a.   unsigned  :无符号位,正数 -- b.   zerofill  :填补0,当显示的长度小于指定长度那用0填补,如果是zerofill一定自动填加unsigned -- 2.浮点型 -- (1)float([M,D]) unsigned | zerofill --单精度浮点,大小4字节(2^32 1位符号位,8数,23指数) 范围:-3.40e38~3.40e38  精度 7位 -- (2)double([M,D]) unsigned | zerofill --双精度浮点,大小8字节(2^64 1位符号位,11数,23指数) 范围:-1.79e38~1.79e38  精度 14位 -- (3)decimal([M,D]) unsigned | zerofill --定长浮点,默认M 10  D 0   最大M 65  D 最大30 -- 区别: -- a. M指浮点总位数,D小数位  如:float(7,2) unsigned   最大值99999.99 (浮点总位数7位) -- b. float double 存近似值 四舍五入 -- c. decimal 精确值 -- 3.字符类型 -- (1)char --定长字符  -- 0-255字节 字符不够用空格填补够255字节长度 -- (2)varchar --变长字符 有多少字符存多少字符。 -- (3)tinytext      0-255字节 -- (4)text          0-65535字节 -- (5)mediumtext    16777125字节 -- (6)longtext      42亿左右     -- 区别     -- a. char 效率高 但占空间; varchar 效率低但省空间;如密码 用char(32); 密码加密码为固定长度     -- b. text 效率最低,一般用在新闻内容字段中     -- c. varchar,char的字段长度受下面影响      -- (a)最大65535字节,(b)字符集utf8 至多占3字节 gbk 至多占2字节 -- 4.布尔类型 -- (1) tinyint(1) -- (2) boolean -- 5.枚举类型 -- (1) enum  0-65535字节 如:sex enum('男','女','保密') -- 5.约束条件 -- (1) NOT NULL || not null不为空,必填 -- (2) DEFAULT || default 默认值 -- (3) [PRIMARY] KEY || primary key 主键 一个表中必须有一个主键,是主键的字段一定是NOT NULL和UNIQUE唯一性 -- (4) UNIQUE [KEY] 唯一性(例如name,email,不重复的值) -- (5) AUTO_INCREMENT ||auto_increment 自动增长,有自动增长的字段一定是主键 -- (6) 外键约束  ,foreign key (当前表的外键字段名) references 主表名(字段名;)  -- 修改表的编码  -- ALTER TABLE cms_user DEFAULT CHARSET=utf8;   ALTER TABLE cms_user DEFAULT CHARSET=utf8;  -- 修改表的引擎 InnDB MyISAM  -- ALTER TABLE cms_user ENGINE=InnoDB;   ALTER TABLE cms_user ENGINE=InnoDB;  -- 修改表名字   ALTER TABLE cms_amdin rename cms_admin; -- 二.帮助   -- \h 关键字   -- help 关键字   -- ? 关键字 -- 三.对表中数据操作  -- 1.添加(Insert)   --(1)带字段的添加 insert 表名(字段名,字段名,..) value(值,值,..),(值,值,..)..   INSERT cms_user(name,pwd,age,sex,addr,email) value('adisen','125415',18,'0','beijin','adisen@gmail.com');   --(2)不带字段的添加(从第一个字段到最后一个字段都要赋值)   -- INSERT 表名 value(值,值,值,..)   INSERT cms_user value(15,'linmin','125415',18,'0','beijin','linmin@gmail.com');   --(3)只能填加一条记录   -- INSERT 表名 set 字段名=值,字段名=值,字段名=值,...;   INSERT cms_user set name='john',pwd='1525',email='jhon@sina.com';  -- 2.删除(Delete)  -- (1) delete form 表名 [where 条件];  //如果delete语句没有where条件,将表中数据清空 auto_increment自动增长不重置  -- (2) truncate 表名;  //清空整个表中数据,auto-increment自动重置      delete from cms_user where id=5;      -- (1) delete     执行速度 慢  --会记录日志     数据可恢复   支持事务操作  -- (2) truncate   执行速度 快  --不会记录日志               不支持事务操作  -- 3.更新(Update)  -- update 表名 set 字段名=值,字段名=值,... [where 条件];   update cms_user set age=18, addr='sz' where id=5;   update cms_user set age=18, age=age+1;  -- 更新addr字段中编号是1 3 5值为shenzhen   update cms_user set addr='guangzhou' where id=4 or id=6 or id=9;        -- 四.对表中数据查询  -- 1. select * from 表名;   select * from cms_user;  -- 2. select 字段名|expr,字段名|expr... from 表名;   select name,age from cms_user; -- expr select 6+7,5*7,9-2; --可以跟表达式 select database();--查询当前打开的数据库 select now();--查询当前系统时间 select user();--查询当前用户 select version();--查询mysql版本  -- 3. 给字段起别名  -- select 字段名 as 别名,字段名... from 表名;   select name as n, age as a from cms_user; -- 4. 给表起别名  -- select 字段名,字段名.. from 表名 as 别名;   select name, age from cms_user as c; -- 5. 表名(别名).字段名:字段名来自哪个表  -- select 表名(别名).字段名,字段名... from 表名 as 别名   select c.name,c.age from as cms_user as c; -- 6. 数据库名.表名:表名来自哪个数据库  -- select 字段名,字段名,... from 数据库名.表名;   select name,age from php1702.cms_user; -- 7. 完整格式  -- select 字段名,字段名,... from 表名 [where 条件] [group by 字段] [having 条件] [order by 字段] [limit [$offset,]$length];  -- 分组查询 如:   $t=time();   $startime=$t-24*3600;     select count(*) as num,n.title,c.newsid from clicknum as c join news as n on c.newsid=n.id where clicktime>$startime group by newsid order by num desc;     select count(*) as num,n.title,c.newsid from clicknum as c join news as n on c.newsid=n.id where clicktime>$startime group by newsid order by num desc;     select distinct(userid) from review where newsid=$newsid;--把重复的去掉  --去重  distinct(userid)     select count(*) from (select distinct(userid) from review where newsid=$newsid) as n;--子查询 -- 8. [where 条件]:   -- 条件过滤   -- a. 条件比较运算符 > >= < >= = !=  -- b. [not] between...and...(范围)  -- c. [not] in(值,值...)(某几个值)  -- d. 逻辑运算符 and或&& or或|| !非  -- e. [not] like '字符串';模糊查询 关键符号_ %        --  _: 代理任意一个字符        --  % 代表任意字符 或任意多个字符  -- sphinx 分词 索引 查询     select * from cms_user where id<3;  -- b. [not] between...and...(范围)   --查询cms_usr中编号在2-5的记录     select * from cms_user where id between 2 and 5;     select * from cms_user where id>=2 and id<=5;   --查询cms_usr中编号不在2-5的记录     select * from cms_user where id not between 2 and 5;     select * from cms_user where id<2 or id>5;   --查询cms_usr中编号 2 4 5的记录     select * from cms_user where id in(2,3,5);     select * from cms_user where id=2 or id=3 or id=5;   --查询cms_usr中编号不是 2 4 5的记录     select * from cms_user where id not in(2,3,5);     select * from cms_user where id!=2 and id!=3 and id!=5;     --查询cms_user 中name字段是anna 和pwd字段是add4记录     select * from cms_user where name='anna' and pwd='add4';     --查找cms_user中name字段包含字母o的记录     select * from cms_user where name like '%o%';     --查找cms_user中name是5个字符的字段     select * from cms_user where name like '_____'; --9 [group by 字段]:分组 --聚合函数实现 -- count : 每组的个数 -- avg : 每组的平均值 -- max : 每组的最大值 -- min : 每组的最小值 -- sum : 实现每组的和  -- select 字段,字段 from 表名 group by age;     select addr, count(*), avg(age) from cms_user group by addr; --10 [having 条件]:二次过滤 --[where 条件]对字段的过滤     --[having 条件]对结果的过滤,配合group by使用     select addr,count(*) as c,avg(age) from cms_user group by addr having c>2; --11 [order by 字段]:对字段排序 -- order by 字段 asc 升序||desc 降序     select * from cms_user order by id desc; --12 [limit [$offset,]$length]:获得前n条记录 -- $offset:起始编号,编号从0开始 -- $length:记录长度    web页面的分页原理     -- 计算 起始页编号 =(当前页-1)*显示记录长度      $offset=($curpage-1)*$length;    --查询cms_user页中前3条记录    select * from cms_user limit 0,3; -- 五.多表查询 --修改addr字段内容为1 update cms_user set addr='1'; --修改addr字段类型为整型 alter table cms_user modify addr int not null default 1; --修改addtime字段默认时间为当前时间 alter table news modify addtime timestamp not null default current_timestamp; --将cms_user中addr字段编号是2,4,5值改为2; update cms_user set addr=2 where id in(2,4,5) --创建城市表 create table cms_city( id int unsigned primary key auto_increment, cname varchar(30) not null unique )engine=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; --对城市表填加数据     insert cms_city(cname) value('北京'),('天津'),('上海'),('深圳');     --1.格式     -- select 字段,字段...from 表1 类型 表2 on 两表的逻辑联系类型 表3 on 两表的逻辑联系     -- 内连接例如:     select u.id,u.name,c.cname from cms_user as u inner join cms_city as c on u.addr=c.id;      -- 外连接例如     select u.id,u.name,c.cname from cms_city as c left join cms_user as u on u.addr=c.id order by id asc;     --2.类型     --(1)内连接:inner join 查询两表中都复合的信息     --(2)外连接: 左外连接 left join  右外连接 right join 没有用null填补      -- 查看创建数据库的命令代码    SHOW CREATE DATABASE php1702; -- 修改数据库编码 -- ALTER DATABASE php1702 [DEFAULT] CHARSET=gbk;    ALTER DATABASE php1702 CHARSET=gbk; ---创建数据库 --CREATE DATABASE [IF NOT EXISTS] php1702 CHARSET=UTF8;    CREATE DATABASE php1702 CHARSET=utf8; --查看现在数据库    SHOW DATABASES; -- 查看创建数据库的命令的 -- SHOW CREATE TABLE [数据库名];    SHOW CREATE DATABASE php1702; -- 查看创建数据库的命令的 -- SHOW CREATE TABLE [表名];    SHOW CREATE TABLE users; -- 打开数据库    USE php1702; -- 查看当前打开的数据库    SELECT DATABASE(); -- 创建表(Table)结构 -- CREATE TABLE [IF NOT EXISTS] 表名(字段名(Field) 数据类型[字段属性|约束条件],...,...)    CREATE TABLE IF NOT EXISTS users(        name varchar(30),        age int    ); -- 查看表    SHOW TABLES; -- 查看表结构(字段) -- DESC 表名; DESCRIBE 表名;    DESC users;    DESCRIBE user; -- 对表中数据的添加和查询 -- insert 表(字段名,字段名,...) value(值,值,...),(值,值,...),......;    INSERT users(name,age) VALUE('tom',18),('alice',20),('jerry',20);  -- 修改表结构 -- 1.添加字段 -- ALTER TABLE 表名 ADD 字段名 数据类型[字段属性|约束条件] [FIRST|AFTER 字段名],[FIRST|AFTER 字段名]...    ALTER TABLE php1702 ADD addr varchar(50) NOT NULL DEFAULT '北京' AFTER name; -- 2.删除字段 -- ALTER TABLE 表名 DROP 字段名,字段名,...    ALTER TABLE php1702 DROP name; -- 3.修改字段 -- ALTER TABLE 表名 MODIFY 字段名 数据类型[字段属性|约束条件],...,..    ALTER TABLE php1702 MODIFY addr varchar(50) NOT NULL default '天津' AFTER sex; -- 3.修改字段名 -- ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型[字段属性|约束条件],...,..    ALTER TABLE php1702 CHANGE addr newaddr varchar(50) NOT NULL default '天津' AFTER sex;    ALTER TABLE cms_amdin rename cms_admin; --创建索引 --网站慢的时候运行 慢查询 查看进程    show processList; --修改mysql配置 也可以进行慢查询 --创建索引分类 --主键索引 创建 key 或 primary key --唯一索引            create unique index 索引名 on 表名(字段列表,......)  alter table 表名 add unique 索引名(字段列表) --普通索引  create index 索引名称 on 表名(字段列表,....)  alter table 表名 add index 索引名称(字段列表) --全文索引  mysql 全文索引对中文不起作用 -- 例子:查询card为'903237939533756' // 703706806573126 select * from student where card=903237939533756 --为card创建索引 create unique index i_card on student(card); --例子:查询38班,年龄最大的10人 select * from student where classid=38 order by age desc limit 10; --创建联合索引 create index i_classid_age on student(classid,age); --评价一个查询语句的性能好坏使用 explain: explain select * from student where classid=38 order by age desc limit 10; --出现 Extra---->Using filesort  必须优化 --例子:查询38班,男女生各有多少人? select count(sex) from student where classid=38 group by sex;  --explain 出现 Using temporary //临时表; Using filesort//表外排序 必须优化 create index i_classid_sex on student(classid,sex);  --查询语句中如何指定索引的名字 强制索引 select * from table1 force index (field1)  --如: select count(*) from student force index(i_classid_age) where classid=38 group by sex;  --存储过程 --1、创建 create procedure 名称(in|out|inout 参数 类型,...) begin 变量 流程控制语句 聚合函数 sal语句 end in 传入 out 传出 inout 传入传出 --例子:写一个存储过程,来实现统计某个班有多少人。  --代入 create procedure getClassNum(in cid int);  --cid 不能叫classid 跟下面冲突 begin select count(*) as num from student where classid=cid; end// -- 取出用     call getclassnum(38) --代出 create procedure getClassNum1(in cid int, out num int) begin select count(*) into num from student where classid=cid; end// -- 取出用   call getclassnum1(38,@re) --代入出 create procedure getClassNum2(inout cidNum int) begin select count(*) into cidNum from student where classid=cidNum; end// -- 取出用    set @re=38//   call getclassnum2(@re)//   select @re// --删除存储过程  销毁存储过程  drop procedure getClassNum2// --查看存储过程   show procedure status;   --高版本用下面命令   select name from MySQL.proc where db='projecttwo' and type='PROCEDURE'// --查看所有存储方法 --查看某个存储过程   show create procedure 过程名称 --在CMD窗口中,改变sql语句的结束符合: 分号换成// delimiter// --cmd窗口要以管理员身分打开 --变量 declare 变量名称 类型(长度) default 默认值; --2、调用 call --过程名称(参数,....) --php中如何运行存储过程  如下: mysqli_query("call getClassNum(38)"); mysqli_fetch_assoc(); --拿结果 --字符串的拼接 concat(字段,变量,'字符串',...) replace(字段|字符串|变量,search,replace)  --替换 --例如:把产品表中字段content中包含suom替换成datiegeda update product set content=replace(content,'suom','datiegeda'); --把产品表content字段的值末尾都拼一个字符串PSD1702 update product set content=concat(content,'psd1702') --流程控制器语句 while 条件 do  循环体; 变换步长; end while; if 条件 then else end if; if 条件 then elseif 条件  then else end if; --例子:把0到两个数相加中的偶数输出.5+9 create procedure testn(in num1 int,in num2 int); begin declare num int default 0; #--存放num1+num2的结果 declare i int default 0;   #--循环变量 set num=num1+num2; #--加运算 while i<=num do if i%2=0 then   select i; end if; set i=i+1;#--变换步长 ` end while; end// --触发器 --有一个站内搜索功能,要求同时搜索两个product news.表 select * from (select id,title,addtime from news1 where title like '%a%'  union  select id, title,addtime from product1 where title like '%a%')  as t order by addtime desc limit 5; select * from (select id,title,addtime,'news' as ft from news1 where title like '%a%'  union  select id, title,addtime ,'product1' as ft from product1 where title like '%a%')  as t order by addtime desc limit 5; --分析表性能  extra 列下出现 Using filesort  因为order 排序出现的. 需要优化掉 explain select * from (select id,title,addtime,'news' as ft from news1 where title like '%a%'  union  select id, title,addtime ,'product1' as ft from product1 where title like '%a%')  as t order by addtime desc limit 5; --性能超差,优化方案 --1、不产生临时表新建一个总表 create table zong( id int, title varchar(100), addtime int, ft varchar(20) )// --2.news1,product1 同步到总表,使用触发器 create table product1( id int key auto_increment, title varchar(100), addtime int )// create table news1( id int key auto_increment, title varchar(100), addtime int )// --修改 auto_increment 的值 news的auto_increment从1000000000开始 alter table news1 auto_increment=1000000000// insert into product1(title,addtime) values('abc1',1),('abc2',1),('abc8',1),('abc4',1)// insert into news1(title,addtime) values('ta5',1),('ta6',1),('ta9',1),('ta10',1)// --创建触发器 create trigger 时机 insert|update|delete 名称 on 表名 for each row begin  代码集; 说明:不能使用select输出 end// --案例: 当news1中insert一条记录,同时往zong表中写一条记录。  create trigger news1_insert after insert on news1 for each row  begin   insert into zong(id,title,addtime,ft) value(new.id,new.title,new.addtime,'news1'); #--表news1新写入记录的id值 new.id  end//  --案例: 当news1中修改一条记录update,同时往zong表中写一条记录。  create trigger news1_update after update on news1 for each row  begin   update zong set title=new.title where id=old.id; #--表news1新写入记录的id值 new.id  end// update news1 set title='nihao' where id=100000008//  --案例: 当news1中删除一条记录,同时往zong表中写一条记录。  create trigger news1_delete after delete on news1 for each row  begin   delete from zong where id=old.id; #--表news1新写入记录的id值 new.id  end// delete from news1 where id=100000009// --用户管理   --创建用户 create user 用户名@localhost [identified by '密码']; --修改密码 --set password for 用户名@localhost=password('新密码'); set password for fanny@localhost=password('123456'); --删除用户 drop user 用户名@localhost --权限管理  --分配权限 --grant 权值 on 数据库及表 to 用户@localhost; --权值: all create grant revoke insert update delete alter drop --数据库及表:*.*  库 名.* 库名.表名  grant select on projecttwo.* to fanny@localhost --回收权限  revoke 权值 on 数据库及表 from 用户@localhost; --数据库的恢复与备份 --备份:把mysql中的表结构及数据生成一个文件 mysqldump -u用户名 -p密码 数据库的名称>D:/projecttwo.sql --恢复:先把文件传到服务器上 用ftp上传 linx服务器用  winscp use 数据库名称; source sql文件的路径 --视图  create view 视图名称 as select 语名 --例子:从class student 创建一个视图,视图中包含班极名称及学生的所有信息。 create view student_view as select c.name as cname,s.* from student as s join class as c on s.classid=c.id  --例子:查询学生ID为5的班极名称。 --没创建视图前用多表连查 select c.name as cname,s.* from student s join class c on s.classid=c.id where s.id=5; --视图查询 select * from student_view where id=5
转载请注明原文地址: https://www.6miu.com/read-39431.html

最新回复(0)