MySQL基本知识及练习(5)

2019-10-11 12:10 来源:未知

8、lower() 小写

select lower(name) as g from student;  #将字段name中塞尔维亚共和国语全体制改善为小写,但不改换原值

MySQL基本知识及练习(5)

1.求三个班级数学平均分。
(1). select sum(math) / count(math) as 数学平均分
from student;

(2). select avg(math) as 数学平均分
from student;

(3).select avg(name) as 小明平均分
from student;//0

2.求二个班级总分平均分。
(1).select (sum(chinese) sum(math) sum(english)) / count(*)
from student;

(2).select avg(chinese math english)
from student;

3.求班级语文最高分和最低分。
select max(name),min(name)
from student;

drop table if exists teacher;
create table teacher(
id int,
name varchar(20),
birthday date
);
insert into teacher(id,name,birthday) values(1,'jack','2011-1-1');
insert into teacher(id,name,birthday) values(2,'marry','2011-2-2');
insert into teacher(id,name,birthday) values(3,'sisi','2011-3-3');

select max(birthday),min(birthday)
from teacher;

4.对订单表中物品分类后,展现每一样商品的总价
select product as 类外号,sum(price) as 商品连串总价
from orders
group by product;

5.查询购买了几类商品,况且每类总价抢先100的物品
select product as 类小名,sum(price) as 商品品种总价
from orders
group by product
having sum(price) > 100;

6.where v.s. having区别:

where主要用以行过滤器
having主要用于项目过滤器,平时有having就必将出现group by,但有group by的地点,不自然出现having。hving能够说是指向结果集在拓宽查询的。

drop table if exists teacher;
create table teacher(
id int primary key auto_increment,
name varchar(20) not null unique,
birthday date
);
insert into teacher(name,birthday) values(NULL,'2011-1-1');
insert into teacher(name,birthday) values('marry','2011-2-2');
insert into teacher(id,name,birthday) values(3,'sisi','2011-3-3');

select max(birthday),min(birthday)
from teacher;

7.去除主键,主键在表中独有三个,要么是一列,要么是多列
alter table teacher drop primary key;

8.一对一涉及(方案一):
drop table if exists card;
drop table if exists person;

create table person(
id int primary key auto_increment,
name varchar(20) not null
);

insert into person(name) values('jack');
insert into person(name) values('marry');

create table card(
id int primary key auto_increment,
location varchar(20) not null,
pid int,
constraint pid_FK foreign key(pid) references person(id)
);

insert into card(location,pid) values('BJ',1);
insert into card(location,pid) values('GZ',2);
insert into card(location,pid) values('CS',NULL);
insert into card(location,pid) values('NJ',3);//出错

//删除person表的某记录
delete from person where name = 'jack';

9.一对一提到(方案二):
drop table if exists card;
drop table if exists person;

create table person(
id int primary key auto_increment,
name varchar(20) not null
);
insert into person(name) values('jack');
insert into person(name) values('marry');

create table card(
id int primary key auto_increment,
location varchar(20) not null,
constraint id_FK foreign key(id) references person(id)
);
insert into card(location) values('BJ');
insert into card(location) values('GZ');
insert into card(location) values('CS');//出错
insert into card(location) values(NULL);

10.一对多/多对一涉及:
drop table if exists employee;
drop table if exists department;

create table department(
id int primary key auto_increment,
name varchar(20) not null
);
insert into department(name) values('软件部');
insert into department(name) values('销售部');

create table employee(
id int primary key auto_increment,
name varchar(20) not null,
did int,
constraint did_FK foreign key(did) references department(id)
);
insert into employee(name,did) values('jack',1);
insert into employee(name,did) values('marry',1);

11.主题材料?查询"软件部"的持有职员和工人(组合式)
select d.name as 部门名,e.name as 员工名
from department as d,employee as e
where d.name = '软件部';

思量:还应该有没有其余措施?

分解:
(1)select id from department where name='软件部';
(2)select name from employee where did = 1;
(总)嵌入式SQL

select name as 员工
from employee
where did = (
select id
from department
where name='软件部'
);

12.多对多涉及:
drop table if exists middle;
drop table if exists student;
drop table if exists teacher;

create table if not exists student(
id int primary key auto_increment,
name varchar(20) not null
);
insert into student(name) values('jack');
insert into student(name) values('marry');

create table if not exists teacher(
id int primary key auto_increment,
name varchar(20) not null
);
insert into teacher(name) values('赵');
insert into teacher(name) values('蔡');

create table if not exists middle(
sid int,
tid int,
constraint sid_FK foreign key(sid) references student(id),
constraint tid_FK foreign key(tid) references teacher(id),
primary key(sid,tid)
);
insert into middle(sid,tid) values(1,1);
insert into middle(sid,tid) values(1,2);
insert into middle(sid,tid) values(2,1);
insert into middle(sid,tid) values(2,2);

13.难点?查询"赵"所教过的具备学员
select t.name as 老师, s.name as 学员
from teacher as t,student as s,middle as m
where t.name = '赵'and m.sid=s.id and m.tid=t.id;

14.模式:
select 列出须要展现的字段
from 列出所涉及到的有所表,建议写别名
where 业务准则 and 表关联条件

15.施用MySQL特有函数:
到年根儿还会有几少天?
select datediff('2011-12-31',now());

16.截取字符串
select substring('mysql',1,2); //从1开始

17.保存小数点后2位(四舍五入)
select format(3.1415926535657989,3);

18.向下取整(截取)
select floor(3.14);
select floor(-3.14);
select floor(3.54);
select floor(-3.54);

19.取随机值
select format(rand(),2);

20.取1-6里头的专断整数值
select floor(rand()*6) 1;

21.MySQL扩展知识:
查MySQL文书档案,利用MySQL的函数:随机发生'a'-'z'之间的任性字符。
私行产生'a'-'z'之间的任意字符
(1)查询'a'-'z'对应的Unicode值
select ascii('a');//97
select ascii('z');//122

(2)发生97-122之内的轻松整数
select floor(rand()*26) 97;

(3)爆发97-122对应的字符
select char(floor(rand()*26) 97);

22.查MySQL文档,利用MySQL的函数:对密码'123456'进行MD5加密。
select md5('123456');

drop table user;
create table user(
id int primary key auto_increment,
name varchar(20),
gender varchar(6),
salary float
);
insert into user(name,gender,salary) values('jack','male',4000);
insert into user(name,gender,salary) values('marry','female',5000);
insert into user(name,gender,salary) values('jim','male',6000);
insert into user(name,gender,salary) values('tom','male',7000);
insert into user(name,gender,salary) values('soso','female',NULL);
insert into user(name,gender,salary) values('haha','female',3500);
insert into user(name,gender,salary) values('hehe','female',4500);
select * from user;

23.MySQL特有流程序调整制函数:
1) if(value,第一值,第二值);
value为真,取第一值,不然取第二值
将4000元(含)以上的职工标记为"高薪",否则标志为"起薪"
左近于Java中的三目运算符

select if(salary>=5000,'高薪','起薪')
from user;

2) ifnull(value1,value2)
value1为NULL,用value2替代
将报酬为NULL的职工标识为"无薪"

select name as 职员和工人,ifnull(salary,'无薪') as 报酬位意况况
from user;

3) case when [value] then [result1] else [result2] end;
当value表达式的值为true时,取result1的值,不然取result2的值(if...else...)
将四千元(含)以上的职员和工人标志为"高薪",不然标记为"起薪"

select
case when salary>=5000 then '高薪'
else '起薪' end
from user;

4) case [express] when [value1] then [result1] when [value2] then [result2] else [result3] end;
当express满足value1时,取result1的值,满足value2时,取result2的值,否则取result3的值(switch...case..)
将捌仟元的职员和工人标记为"高薪",陆仟元的职工标记为"中薪",五千元则标志为"起薪",不然标志为"低薪"

select
case salary
when 7000 then '高薪'
when 6000 then '中薪'
when 5000 then '起薪'
else '低薪' end
from user;

25.查询同一性其余职工总人数>2的薪水总额,并按薪水总量降序排列
select count(*) as 员人数,gender as 性别,sum(salary) as 工资和
from user
group by gender
having count(*)>2
order by sum(salary) desc;

26.将性别为男的员工薪俸-1000,性别为女的职员和工人薪资 一千,在一条SQL上产生
select if(gender='female',salary 1000,salary-1000) as 工资 from user;  

27.常用函数比如

select now();
select year(now());
select month(now());
select day(now());
select floor(datediff(now(),‘1999-01-01’)/365);//间隔年
select format(rand(),2);
select floor(rand()*5) 1;[1-5]随机值
select length(trim(' jack '));
select strcmp('a','w');

总结:

1 .关乎的完整性

(1)实体(行)完整性:每条记下有多少个独一标志符,日常用无其余职业含义的字段表示
(2)参照完整性:一张(A)表的某些字段必得征引另一张(B)表的某部字段值,何况B表 的字段必需先存在。
(3)域(列)完整性:域即单元数据,域中的数值必需相符一定的法则,举例字段的值域、字 段的品种等的束缚。

2 键的概念
(1)主键:唯有独一字段
(2)组合主键:由八个字段组合起来,产生独一字段
(3)外键:针对多张表之间的关系

3 主键的表征
(1)主键不能够重复
(2)主键无法为NULL
(3)auto_increment是MySQL特有的,暗中认可从1方始,该ID值与表同生亡
(4)多个人项目中,日常选择UUID来扭转独一的主键值,便于多少个统一数据时仍旧保持实体完整性

4 独一约束的性状
(1)非NULL值不可能再度
(2)能够插入多少个NULL值
(3)'NULL'空串和NULL是见仁见智的概念

5 非空约束特点
(1)不能插入NULL值
(2)主键约束=非NULL约束 独一约束

6 外健特点
(1)外键值必得来自所引用别多少个表主键值,或NULL

7 关联关系
(1)一对一(外健根业务有关)
(2)一对多或多对一(外键放置在多边)

(3)多对多(外健放置在事关表中,将在叁个多对多拆分成三个一对多关系)

8.常用函数:
(1).日期函数:

图片 1

2.数学函数:

图片 2

3.字符串函数图片 3

) 1.求四个班级数学平均分。 (1). select sum(math) / count(math) as 数学平均分 from student; (2). select avg(math) as 数学平均分 from...

Like关键词

  • 意味着依据另外二个表的概念复制贰个新的空表,空表上的字段属性和索 引都和原表同样

     mysql>create table students_copy like students;
     Query OK, 0 rows affected (0.01 sec)
     mysql> show create table students_copy;
    CREATE TABLE `students_copy` (
     `sid` int(11) DEFAULT NULL,
     `sname` varchar(20) DEFAULT NULL,
    `sex` int(11) DEFAULT NULL,
     UNIQUE KEY `idx_st_sid` (`sid`),
    KEY `idx_st_union` (`sname`,`sex`)
     )ENGINE=InnoDB DEFAULT CHAR SET=latin1
    

5、substr(string,start,len) 截取

select substr(soucr,1,2) as g from teachers;

从start开始,截取len长度,start从1开始

concat(str1,str2,str3......................)字符串拼接,将三个字符串拼接在一道

select concat(id,score,sit) as g from teachers;

Create table ... as select语句

  • 代表创立表的还要将select的询问结果数据 插入到表中,但索引和主外键新闻都不会一齐过来

    mysql> create table students_copy2 as select * from students; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0

    mysql> desc students_copy2; ------- ------------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | ------- ------------- ------ ----- --------- ------- | sid | int(11) | YES | | NULL | | | sname | varchar(20) | YES | | NULL | sex | int(11) | YES | | NULL | | ------- ------------- ------ ----- --------- -------

3、算术运算符  >= | <=| <> |=

for example

寻觅价格低于70的记录

mysql> select bName,price from books where price <= 70;

 

图片 4

3

布署选课数据库系统

  • 创设七个名叫course的数据库
  • 在该数据库下开创以下多少个表:
  • Students表:sid整型自增主键,sname字符串61人,gender字符串九个人,dept_id整型并外键到dept表的id字段
  • Dept表:id整型自增主键,dept_name字符串64位
  • Course表:id整型自增字段主键,course_name字符串64位,teacher_id整型外键到teacher表的id字段
  • Teacher表:id整型自增字段主键,name字符串六十八位,dept_id整型外键到dept表的id字段
  • Students表和teacher表的dept_id为非空

    mysql> create database course; mysql> use course;

    mysql> create table dept(id int auto_increment primary key,dept_name varchar(64));

    mysql> create table students(sid int auto_increment primary key,sname varchar(54),gender varchar(12),dept_id int not null,constraint for_1 foreign key(dept_id) references dept(id));

    mysql> create table teacher(id int auto_increment primary key,name varchar(64),dept_id int not null, constraint for_2 foreign key(dept_id) references dept(id));

    mysql> create table course(id int auto_increment primary key,course_name varchar(64),teacher_id int,constraint for_3 foreign key(teacher_id) references teacher(id));

2、事务

单个逻辑单元实践的一种种操作,通过将一组操作结合叁个,试行的时或许全体打响,要么全体失利,使程序更牢靠,简化错误复苏。

MySQL 事务首要用来拍卖操作量大,复杂度高的多少。比如说,在人口管理种类中,你剔除一人手,你即须求删除职员的基本资料,也要刨除和该人士相关的音信,如信箱,著作等等,那样,那一个数据库操作语句就构成贰个事务!

在 MySQL 中唯有利用了 Innodb 数据库引擎的数据库或表才扶助专业。

事务管理能够用来保安数据库的完整性,保障成批的 SQL 语句要么全部进行,要么全体不推行。事务用来管理 insert,update,delete 语句。

MYSQL 事务管理主要有三种艺术:

1、用 BEGIN, ROLLBACK, COMMIT来实现

BEGIN 开首贰个工作

ROLLBACK 事务回滚

COMMIT 事务确认

2、直接用 SET 来退换 MySQL 的机关提交形式:

SET AUTOCOMMIT=0 防止自动提交

SET AUTOCOMMIT=1 开启自动提交

成立工作

begin;

update books set bName="plyx" where bId=1;

update books set bName="plyx" where bId=2;

commit//

翻看记录,已经修改了

select * from books;

图片 5

19

Default代表设置字段的暗许值

create table students3(sid int,sname varchar(10),gender int default 0); 
insert into students3 values(1,'a',default);
insert into students3(sid,sname) values(2,'b');
mysql> select * from students3;
 ------ ------- -------- 
|sid         |sname    |gender        | 
 ------ ------- --------  
|1|a|0| 
|2|b|0|

6、count() 计测度数 记录字段数据条数

select count(id) as g from teachers;

Temporary关键词

  • 意味着创制的是不经常表,有时表仅对本链接可以知道,别的的数据库链接不可以看到, 当本链接断开时,不时表也自行被drop掉

    mysql> create temporary table temp1(sid int,sname varchar(10)); 
    Query OK, 0 rows affected (0.00 sec)
    mysql> insert into temp1 values(1,'a'); 
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from temp1;
     ------ ------- 
    |sid |sname|
     ------ ------- 
    | 1 |a |
     ------ ------- 
    1 row in set (0.00 sec)
    
  • 另四个数据库链接实施同样的查询语句查不到数据

    mysql> select * from temp1;
    ERROR 1146 (42S02): Table 'test.temp1' doesn't exist        -- 本数据库链接断开后再链接,临时表也不存在
    mysql> select * from temp1;
    ERROR 1146 (42S02): Table 'test.temp1' doesn't exist
    

7、upper() 大写

select upper(name) as g from student;  #将字段name中德语全体形成大写,但不改动原值

SQL语法基础

4、min() 最小值

select min(id) as g from teachers;

Auto_increment

  • 表示字段为整数照旧浮点数类型的value 1递增数值,value为当前表 中该字段最大的值,默许是从1上马递增
  • 三个表中只或然有叁个自增字段,且该字段必得有key属性,不能含有default属性,且插入负值会被当成非常大的正数

    mysql>create table students4(sid int auto_increment,sname varchar(10));
    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a
    key
    mysql>create table students4(sid int primary key auto_increment,sname varchar(10));
    Query OK, 0 rows affected (0.01 sec)
    mysql> insert into students4(sname) values('a');
    Query OK, 1 row affected (0.00 sec)
    mysql> insert into students4(sid,sname) values(3,'b');
    Query OK, 1 row affected (0.01 sec)
    mysql> insert into students4(sname) values('c');
    Query OK, 1 row affected (0.00 sec) 
    mysql> select * from students4;
     ----- ------- 
    |sid        |sname    | 
      ----- -------  
    |1|a| 
    |3|b| 
    |4|c|
    

6、Mysql 子查询

select where条件中又出新select

询问类型为互联网本领的书本

mysql> select bName,bTypeId from books where bTypeId=(select bTypeId from category where bTypeName='网络本事');

 

图片 6

6

Create database语句

  • Create database语句是在MySQL实例上开创四个点名名称的数额 库,create schema语句的语义和create database是一模一样的
  • 当创立的数据库本人存在而且从不写明if not exists子句时,则创制数据库的语句会报错

5、范围运算 [not] between .......and

寻觅价格不在30和60以内的书名和价格

mysql> select bName,price from books where price not between 30 and 60  order by price desc;

图片 7

5

Ignore和replace

  • 表示在插入数据的进度中纵然新表中遭遇违反独一约束 的动静下怎么处理
  • ignore表示不插入,replace表示替换已有的数据, 默许三个首要词都不写则碰到违反的情状会报错

2、avg() 求平均值

select avg (id score) as g from teachers;

Data_type

  • 意味着定义的字段类型

2、调用存储进程

call 过程名(参数1,参数2,...................)

example:定义八个累积进度查看books表中颇有数据

    1. 退换sql私下认可实施符号

    delimiter //

   create  procedure seebooks();

   begin

         select * from sctudent.books;

    end //

    call seebooks() //

图片 8

16

Create database语句

  • create_specification子句指明创造的数据库的习性,并积累在db.opt文 件中
  • Character set属性指明此数据库的默许字符集
  • Collate属性指明此数据库的默许排序法则
  • 创办后的数据库在数据文件所在目录会创立一个融洽的文件目录,用 来含有后续创立的表文件
  • 也能够直接通过mkdir在数据目录创设目录, 则MySQL会识别为贰个数据库,并在奉行show databases命令时方可看 到

    mysql> create database test3;       -- 创建数据库成功 
    Query OK, 1 row affected (0.00 sec)
    mysql> create database test3;       -- 再次创建数据库失败
    ERROR 1007 (HY000): Can't create database 'test3'; database exists
    mysql> create database if not exists test3;         -- 语句执行成功 
    Query OK, 1 row affected, 1 warning (0.00 sec)
    mysql> use test3;       -- 切换到test3数据库
    

字数简要介绍

Not null/null

  • 表示字段是或不是同意为空,默感觉null表示同意为空,
  • not null表示需求对此字段明显数值,大概要有暗中认可值,不然报错

    mysql> create table students2(sid int not null,sname varchar(10)); Query OK, 0 rows affected (0.00 sec) mysql> insert into students2(sname) values('eee'); ERROR 1364 (HY000): Field 'sid' doesn't have a default value

1、定义存款和储蓄进程

create procedure 过程名(参数1,参数2,.............)

begin

      sql语句

end

Constraint

  • 表示为主键、独一键、外键等约束规范命名,若无命名则MySQL会暗中认可给两个

    #### Primary key

  • 代表该字段为主键,主键字段必需独一,必须非空,

  • 贰个表中只好有四个主键,主键能够包含三个或七个字段

    #### Key/index

  • 代表索引字段

    #### Unique

  • 代表该字段为独一属性字段,且允许包涵多少个null值

    #### Foreign key

  • 代表该字段为外键字段

    CREATE TABLE gender ( gender_id int(11) NOT NULL, name varchar(10) DEFAULT NULL, PRIMARY KEY (gender_id) ); create table students5(sid int not null primary key auto_increment,sname varchar(10) unique,gender int,constraint for_1 foreign key (gender) references gender(gender_id));

1、整型

tinyint,  占 1字节 ,有符号: -128~127,无符号位 :0~255

smallint, 占 2字节 ,有符号: -32768~32767无标记位 :0~65535

mediumint 占 3字节 ,有符号: -8388608~8388607,无符号位:0~16777215:

int, 占 4字节 ,有符号: -2147483648~2147483647,,无符号位 无符号位 :0~4 284967295

bigint, bigint,bigint, 占 8字节

bool  等价于 tinyint

create table语句

  • tbl_name表示被成立的表名,暗许在脚下数据库下开创此表,当 然也能够钦命在有个别数据库下创设表
  • if not exists表示当相同的表名存在时,则不实行此创设语句,避免语句执行错误

    create table students2(sid int,sname varchar(10));
    create table test3.students2(sid int,sname varchar(10));        --在test3这个数据库下创建students2表
    create table if not exists students2(sid int,sname varchar(10));
    

一、Msql数据类型

3、字符型

char([m]): :定长的字符 ,占用 m字节

varchar[(m)]::变长的字符 ,占用 m 1m 1 字节,大于 255 个字符:占用 m 2m 2

tinytext,255 个字符 (2 的 8次方 )

text,65535 个字符 (2 的 16 次方 )

mediumtext,16777215字符 (2 的 24 次方 )

longtext (2的 32 次方 )

enum(value,value,...)占 三分之一个字节 最多能够有 65535 个分子 个成员

set(value,value,...) 占 51%/3/4/8个字节,最多能够 有 六拾六个分子

7、limit 限定显示的条条框框

LIMIT子句能够被用于强制 SELECT语句重临钦赐的记录数。 LIMIT 接受贰个或两数字参。必 须是三个整数常量。要是给定两 个数,第一内定再次回到记录行的偏移量,第4个参数再次来到记录行的最大数量。开端偏移量是 0( 并不是1)。

语法 : select * from limit m,n

其间 m是指记录初叶的 index indexindex,从 0最早,表示第一条记下,n是指从第 m 1 条起首,取 n。

询问books表中第2条到六行的记录

mysql>select * from books limit 1,6;

图片 9

7

九、思量与总计

到此主要介绍,mysql一些使用技巧,包蕴数据类型,查询艺术,存款和储蓄进程,外键约束,索引。触发器,事务,还带有部分仓库储存引擎介绍,到此基础部分停止,还应该有后边的享受将会时断时续推出,敬请期望!

图片 10

总结

本身是MIkel Pan,云总结爱好者,定期更新生活感悟,心灵进化者就在MIkel Pan,喜欢作者就来找作者吧!

微博地方:

简书地址:

1、索引类型

平常索引:最基本索引,不有所独一性

独一索引:索引列的值必得独一,但允许有空值。假如是组成索引,则列值的咬合必得独一

主键索引:记录值独一,主键字段少之又少被改换,不能够为空,不可能改改,可用来贰个字段大概多少个字段

全文索引:检索文本新闻的, 针对非常的大的数额,生成全文索引查询速度快,但也很浪费时空

组合索引:一个目录蕴涵八个列

2、创立索引

常常来讲索引:

# 创造普通索引

create table demo(id int(4),uName varchar(20),uPwd varchar(20),index (uPwd));

# 查看建表进度

show create table demo;

demo | CREATE TABLE `demo` (

  `id` int(4) DEFAULT NULL,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  KEY `uPwd` (`uPwd`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

独一索引:字段值只同意出现一次,能够有空值

# 创立独一索引

create table demo1(id int(4),uName varchar(20),uPwd varchar(20),unique index (uName));

# 查看建表进程

show create table demo1;

demo1 | CREATE TABLE `demo1` (

  `id` int(4) DEFAULT NULL,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  UNIQUE KEY `uName` (`uName`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

主键索引:字段记录值独一,字段少之甚少被涂改,日常主键约束为auto_increment恐怕not null unique,无法为空,不可能重复。

# 成立主键索引

create table demo2(id int(4) auto_increment primary key,uName varchar(20),uPwd varchar(20));

# 查看建表语句

demo2 | CREATE TABLE `demo2` (

  `id` int(4) NOT NULL AUTO_INCREMENT,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

全文索引:提升全文字笔迹查验索作用,化解模糊查询

# 创制全文索引

create table demo3(id int(4),uName varchar(20),uPwd varchar(20),fulltext(uName,uPwd));

# 查看建表语句

| demo3 | CREATE TABLE `demo3` (

  `id` int(4) DEFAULT NULL,

  `uName` varchar(20) DEFAULT NULL,

  `uPwd` varchar(20) DEFAULT NULL,

  FULLTEXT KEY `uName` (`uName`,`uPwd`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

二、Mysql数据运算

4、模糊查询  like '%...%'

字段名 [not] like  '%......%'   通配符  任性三个字符

查询书中满含程序字样的记录

mysql> select bName,price from books where bName like '%程序%'

图片 11

4

3、存款和储蓄进度参数字传送递

in 传入参数 int 赋值

IN输入参数:表示调用者向经过传入值(传入值可以是字面量或变量)

OUT输出参数:表示经过向调用者传出值(能够回来多个值)(传出值只好是变量)

INOUT输入输出参数:既意味着调用者向经过传入值,又象征经过向调用者传出值(值只好是变量)

create procedure seebook(in b int)

begin

  select * from school.books where bId=b;

end //

call seebook(4)

图片 12

16

out --------------传出参数

select into 在进程中赋值传给变量,并查看变量值

create procedure seebook2(out b varchar(100))

begin

  select bName into b  from school.books where bId=4;

end //

图片 13

17

进度内的变量使用办法

宣示变量名称,类型,declare 进程内的变量未有@

赋值 set 变量名=(select 语句)

create procedure seebook3()

begin 

        declare str varchar(100);

        set str=(select bName from school.books where bId=20);

        select str;

end//

call seebook3() //

图片 14

18

七、mysql数据结构

主配置文件  my.cnf

数码目录:/var/lib/mysql

经过通讯sock文件 :/var/lib/mysql/mysql.sock

不当日志文件

[mysqld_safe]

log-error=/var/log/mysqld.log

进程PID文件:pid-file=/var/run/mysqld/mysqld.pid

二进制文件:log-bin=mysql-bin.log

2、浮点型

float([m[,d]])  占 4字节 ,1.17E-38~3.4E 3838~3.4E

double([m[,d]])  占 8字节

decimal([m[,d]])  以字符串方式表示的浮点数 

8、连接查询

以贰个多只的字段,求两张表当中相符条件并集。 通过 共同字段把这两张表的一路字段把这两张表连 接起来。

常用的连天:

内连续:依据表中的联合签字字段举行相称

外接连:现实某数据表的 全体记录和其余数码表中切合连接条件的记录。

外连接:左连接、右连接

内连接:for exmaple

create table student(sit int(4) primary key auto_increment,name varchar(40));

insert into student values(1,‘张三’),(2,‘李四’),(3,‘王五’),(4,‘mikel’);

create table teachers(sit int(4),id int(4) primary key auto_increment,score varchar(40));

insert into teachers values(1,1,‘1234’),(1,2,‘2345’),(3,3,‘2467’),(4,4,‘2134’);

select s.* ,t.* from student as s,teachers as t where s.sid=t.sid;

图片 15

8

左连接: select 语句 a表 left[outer] join b 表  on 连接条件 ,a表是主,都来得。

b表是从,主表内容全都有,主表多出去的字段,从表未有的就展现null,从表多出主表的字段不显示。

select * from student as s left join teachers as t on  s.sit=t.sit; 

图片 16

9

右连接:select 语句 a表 right[outer] join b 表  on 连接条件 ,b表是主,都来得。

a表是从,主表内容全都有,主表多出去的字段,从表没有的就体现null,从表多出主表的字段不呈现。

select * from student as sright join teachers as t on  s.sit=t.sit;

图片 17

10

八.科学普及的存放引擎介绍

myisam :

特色: 1、不帮衬职业,不帮忙外键,宕机时会破坏表

            2、使用很小的内部存款和储蓄器和磁盘空间,访谈速度快

            3、基于表的锁,表级锁

            4、mysql 只缓存index索引, 数据由OS缓存

适用场景:日志系统,门户网站,低产出。

Innodb:

特征:1、具备提交,回滚,崩溃恢复生机技能的事务安全存储引擎

           2、帮助自动增加列,帮助外键约束

           3、占用更加的多的磁盘空间以保存数据和目录

           4、不帮忙全文索引

适用场景:要求职业应用,高并发,自动还原,轻快基于主键操作

MEMORY:

特点:1、Memory存款和储蓄引擎使用存在于内部存款和储蓄器中的原委来成立表。

           2、各样memory表只实际对应叁个磁盘文件,格式是.frm。memory类型的表访谈特别的快,因为它的多寡是坐落内部存储器中的,况兼私下认可使用HASH索引,不过若是服务关闭,表中的数量就能够舍弃掉。 

          3、MEMOTucsonY存款和储蓄引擎的表能够采取使用BTREE索引或然HASH索引。

六、存款和储蓄进程

存款和储蓄进度用来封装mysql代码,也正是函数,贰次编写翻译,生成二进制文件,永世有效,升高功用。

五、外键约束

外键约束:foreign key 表与表之间的一种约定关系,由于这种涉及存在,让表与表之间的多寡更是富有完整性,特别富有关联性。

图片 18

3、max() 最大值

select max (id) as g from teachers;

1、sam() 求和

select sum (id score) as g from teachers;

1、触发器

与数据表有关,当表出现(增,删,改,查)时,自动试行其特定的操作

语法:create trigger 触发器名称 触发器机缘 触发器动作 on 表名 for each row

触发器名称:自定义

触发器机遇:after/before   之后/此前

触发器动作:insert  update  delete

开创触发器:

 create trigger delstudent after delete on grade for each now

delete from student where sid='4';

delete from grade where sid=4;

mysql> select sid from student where sid=4;

Empty set

查阅是不是还会有sid=4的值,能够窥见早就被剔除

三、聚合函数

视图

是一张虚构表,由 select select select语句内定的数据结商谈数码,不生成真正文件

create view mikel as select * from school.books;

select  * from mikel;

图片 19

15

创制外键约束

创建user主表

create table user1(id int(11)auto_increment primary key,name varchar(50),sex int(1));

插入数据

insert into user1(name,sex)values("mikel",4),("plyx",6);

创建order外键表

create table `order`(order_id int(11)auto_increment primary key,u_id int(11),username varchar(50),monery int(11),foreign key(u_id) references user1(id)  on delete cascade on update cascade )engine=innodb);

安排数据

INSERT INTO `order` (order_id,u_id,username,monery)values(1,1,'mikel',2345),(2,2,'plyx',3456)

测量检验级联删除

delete from user1 where id=1

查看order表记录

图片 20

12

测量检验级联更新

update  user1 set id=5 where id=2

图片 21

13

测验数据完整性

在order表中插入一条u_id为6的记录

insert into `orser` (u_id)values(6);

Cannot add or update a child row: a foreign key constraint fails (`school`.`order`, CONSTRAINT `order_ibfk_1` FOREIGN KEY (`u_id`) REFERENCES `user1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

user1中不真实id为6的笔录,以后丰盛一条id为6的记录

insert into user1(id)values(6);

图片 22

14

能够见见数据已经插入进去了

1、逻辑运算 and or not

for example:

慎选出 书籍价格 为(30,60,40,50)的笔录

sql> select bName,publishing,price from books where price=30 or price=40 or price=50 or price=60; 

图片 23

1

2、in 运算符

in 运算符用于 WHERE 表明式,以列表的款式协理三个挑选,语法如下

where colunmm in (value1,value2,.......)

where colunmm not in (value1,value2,..........)

当in前边加上not时,表示与in相反,既不在结果中

sql> select bName,publishing,price from books where  price in (30,40,50,60)order by price asc;

图片 24

2

四、索引

mysql中索引是以文件格局贮存的,对表张开增加和删除改,会联手到目录,索引和表保持一致,常用在where 后字段查询就加索引。

亮点:加速查询速度,收缩查询时间

症结:索引侵占一定磁盘空间,会潜移暗化insert,delete,update实行时间

TAG标签: 02-数据库系列
版权声明:本文由彩民之家高手论坛发布于彩民之家高手论坛,转载请注明出处:MySQL基本知识及练习(5)