MySql知识点总结

时间:2019-05-15 09:49:30下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《MySql知识点总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《MySql知识点总结》。

第一篇:MySql知识点总结

1.数据库创建 : Create database db_name;

数据库删除 : Drop database db_name;删除时可先判断是否存在,写成 : drop database if exits db_name.建表 : 创建数据表的语法 : create table table_name(字段1 数据类型 , 字段2 数据类型);

例 : create table mytable(id int , username char(20));

删表 : drop table table_name;例 : drop table mytable;.添加数据 : Insert into 表名 [(字段1 , 字段2 , ….)] values(值1 , 值2 , …..);

如果向表中的每个字段都插入一个值,那么前面 [ ] 括号内字段名可写也可不写

例 : insert into mytable(id,username)values(1,’zhangsan’);.查询 : 查询所有数据 : select * from table_name;

查询指定字段的数据 : select 字段1 , 字段2 from table_name;

例 : select id,username from mytable where id=1 order by desc;多表查询语句------------参照第17条实例.更新指定数据 , 更新某一个字段的数据(注意,不是更新字段的名字)

Update table_name set 字段名=’新值’ [, 字段2 =’新值’ , …..][where id=id_num] [order by 字段 顺序]

例 : update mytable set username=’lisi’ where id=1;

Order语句是查询的顺序 , 如 : order by id desc(或asc), 顺序有两种 : desc倒序(100—1,即从最新数据往后查询),asc(从1-100),Where和order语句也可用于查询select 与删除delete.删除表中的信息 :

删除整个表中的信息 : delete from table_name;

删除表中指定条件的语句 : delete from table_name where 条件语句;条件语句如 : id=3;.创建数据库用户

一次可以创建多个数据库用户如:

CREATE USER username1 identified BY ‘password’ , username2 IDENTIFIED BY ‘password’…..用户的权限控制:grant

库,表级的权限控制 : 将某个库中的某个表的控制权赋予某个用户

Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ];.表结构的修改

(1)增加一个字段格式:

alter table table_name add column(字段名 字段类型);----此方法带括号

(2)指定字段插入的位置:

alter table table_name add column 字段名 字段类型 after 某字段;

删除一个字段:

alter table table_name drop字段名;

(3)修改字段名称/类型

alter table table_name change 旧字段名 新字段名 新字段的类型;

(4)改表的名字

alter table table_name rename to new_table_name;

(5)一次性清空表中的所有数据

truncate table table_name;此方法也会使表中的取号器(ID)从1开始.增加主键,外键,约束,索引。。(使用方法见17实例)

① 约束(主键Primary key、唯一性Unique、非空Not Null)

② 自动增张 auto_increment

③外键Foreign key-----与reference table_name(col_name列名)配合使用,建表时单独使用

④ 删除多个表中有关联的数据----设置foreign key 为set null---具体设置参考帮助文档.查看数据库当前引擎

SHOW CREATE TABLE table_name;

修改数据库引擎

ALTER TABLE table_name ENGINE=MyISAM | InnoDB;.SQL语句运用实例:

--1 建users表

create table users

(id int primary key auto_increment, nikename varchar(20)not null unique, password varchar(100)not null, address varchar(200),reg_date timestamp not null default CURRENT_TIMESTAMP);

--2 建articles表,在建表时设置外键

create table articles(id int primary key auto_increment,content longtext not null,userid int,constraint foreign key(userid)references users(id)on delete set null);

---------

--2.1 建articles表,建表时不设置外键

create table articles(id int primary key auto_increment,content longtext not null,userid int);

--2.2 给articles表设置外键

alter table articles add constraint foreign key(userid)references users(id)on delete set null;

----------

--3.向users表中插入数据,同时插入多条

insert into

users

(id,nikename,password,address)

values(1,'lyh1','1234',null),(10,'lyh22','4321','湖北武汉'),(null,'lyh333','5678', '北京海淀');

--4.向article中插入三条数据

insert

into

articles

(id,content,userid)

values(2,'hahahahahaha',11),(null,'xixixixixix',10),(13,'aiaiaiaiaiaiaiaiaiaiaiaia',1),(14,'hohoahaoaoooooooooo',10);

--5.进行多表查询,选择users表中ID=10的用户发布的所有留言及该用户的所有信息

select articles.id,articles.content,users.* from users,articles where users.id=10 and articles.userid=users.id order by articles.id desc;

--6.查看数据库引擎类型

show create table users;

--7.修改数据库引擎类型

alter table users engine=MyISAM;---因为users表中ID被设置成外键,执行此句会出错

--8.同表查询,已知一个条件的情况下.查询ID号大于用户lyh1的ID号的所有用户

select a.id,a.nikename,a.address from users a,users b where b.nikename='lyh1' and a.id>b.id;

------也可写成

select id,nikename,address from users where id>(select id from users where nikename='lyh1');

9.显示年龄比领导还大的员工:

select a.name from users a,users b where a.managerid=b.id and a.age>b.age;

查询编号为2的发帖人: 先查articles表,得到发帖人的编号,再根据编号查users得到的用户名。

接着用关联查询.select * from articles,users得到笛卡儿积,再加order by articles.id以便观察

使用select * from articles,users where articles.id=2 筛选出2号帖子与每个用户的组合记录

再使用select * from articles,users where articles.id=2 and articles.userid=users.id选出users.id等于2号帖的发帖人id的记录.只取用户名:select user where user.id=(select userid from articles where article.id =2)

找出年龄比小王还大的人:假设小王是28岁,先想找出年龄大于28的人

select * from users where age>(select age from users where name='xiaowang');

*****要查询的记录需要参照表里面的其他记录:

select a.name from users a,users b where b.name='xiaowang' and a.age>b.age

表里的每个用户都想pk一下.select a.nickname,b.nickname from users a,users b where a.id>b.id;

更保险的语句:select a.nickname,b.nickname from(select * from users order by id)a,(se

lect * from users order by id)b where a.id>b.id;

再查询某个人发的所有帖子.select b.* from articles a , articles b where a.id=2 and a.userid=b.userid

说明: 表之间存在着关系,ER概念的解释,用access中的示例数据库演示表之间的关系.只有innodb引擎才支持foreign key,mysql的任何引擎目前都不支持check约束。

第二篇:mySql总结

Mysql命令:在mysql的bin目录下执行: Mysql –h host_name –u user_name –p password Use 数据库名;选定默认数据库(切换数据库)查询当前使用的数据库:select database(); Show databases;显示所有数据库;

Show tables ;显示默认数据库下的所有表; Show status;显示服务器状态信息 c;放弃正在输入的命令; h;显示命令清单;

s;显示mysql服务器状态信息; q;退出mysql;

Describe 表名:查看表结构;

档案柜相当于数据库,抽屉相当于表,抽屉中的文件相当于记录;

0x:加1到9的数字或者a到f就可以构成16进制了。注意零x中的x不能大写。字符串:单引号或者双引号引起来的都是字符串; Tinyint是1字节; Smallint是2字节; Mediumint是3字节; Int是4字节 Bigint是8字节; 删除主表前,先删除子表。选择主键的原则:

1)最少性:尽量选择单个键做为主键

2)稳定性:尽量选择数值更新少的列作为主键。查看自定义函数创建信息:

Show create function function_name;类型总结:

Tinyint :占一个字节,它的范围是-128到127 Smallint:占2个字节,它的范围是-2的15次方到2的15次方减一; Mediumint:占3个字节,它的范围是-2的23次方到2的23次方减一; Int:占4个字节,它的范围是-2的31次方到2的31次方减一; Bigint:占8个字节,它的范围是-2的63次方到2的63次方减一; Float:占4个字节 Double:占8个字节

Decimal(m,n):占m个字节; Char(10)和char(10 char)是一样的;

数值列的完整性约束讲解:

Auto increment(自动标识列):在需要产生唯一标示符号或者顺序值的时候,可用此属性。值从1开始,一般在插入null到auto increment列时,mysql会插入比当前列最大值大1的值。一个表中最多能有一个此属性的列。对于想使用此属性的列应该定义为not null,并定义为primary key或者定义为unique。

Null 和not null:默认是null,如果在插入数据时,指定了not null,那么在插入数据时必须要在此字段插入数据。如果指定了null ,那么在插入数据时,如果没有给此字段插入数据,此字段就插入null.mysql-h host-u user-p menagerie 注意,刚才显示的命令行中的menagerie不是你的 密码。如果你想要在命令行上在-p选项后提供 密码,则不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建议在命令行输入密码,因为这样会暴露 密码,能被在机器上登录的其它用户窥探到。

查询当前日期:使用curdate()函数,任何表都可以的。Select curdate()from cjym;可以通过year,month,day获取它的年月日。Select year(curdate())from cjym;Select month(curdate())from cjym;Select day(curdate())from cjym;Mysql中的_和%表示单个字符和零个或者多个字符; 有like 和not like比较操作符;

要想找出你的服务器支持哪个存储引擎,执行下面的语句: Show engines;Select 1/7;都可以; 日期和时间类型: Time :时间; Date:日期;

Datetime:日期和时间; 创建表:

Create table student(Student_id int(10)not null primary key auto_increment, Student_name varchar(20));注意在创建表的时候,如果是手动写sql语句的时候自动标示符要写这样的 auto_increment;有个下划线; 更改表结构操作:

给表添加一条字段:在最前面加字段用first,在最后面加用after;默认在最后加; Alter table student add age int first;给表设定默认值:

Alter table student alter column_name set default default_value;给表中的字段添加主键;如果主键存在则出现错误; Alter table student add primary key(column_name);删除表中的一列:

Alter table student drop column_name;删除表中的主键: Alter table student drop primary key;更改表的名字:

Alter table student rename as new_tablename;修改表中的字段类型: Alter table student modify sno int;运算符:

Between。。and用于检验一个值(一个求值表达式)是否存在一个指定的范围内;

Select 10 between 1 and 100;结果是1:表示是真的;

In 用于检验一个值(一个表达式)是否包含在一个指定的集合中。

Select 2 in(1,2,3,4,5,6),’a’ in(‘b’,’e’,.’h’);结果显示1和0;1表示真,0表示假;

Is null和is not null来测定是否为空;

特殊的运算符:<=>:mysql称它为null安全的等于; Select null=null,null< = >null;结果显示null和1; Regexp运算符; Mysql中的元字符;

逻辑运算符:and(&&),or(||),not(!)插入数据时,插入多行值时:

插入多行数据: Insert into 表名(列名)Select 列名 From 表名;

更改记录的操作语法格式:

Update 表名 set 列名=更新值 [where 更新条件] 删除记录的操作格式:

Delete from 表名 [where 删除条件]; 表和字段的引用方式有两种: 绝对引用:数据库名.表名(.字段名);相对引用:表名.(字段名); Where子句使用的谓词:

Between。。and。。在两数之间 Not between ….and ….不在两数之间 In:是否在特定的集合里。Not in :与上面相反。Like:是否匹配一个模式;

Regexp:检查一个值是否匹配一个常规表达式; 复制表:

Create table student select name,age from stu;复制表后,表中的字段和stu表中的字段一样并且记录数也是存在的;

学习地址:http://

Mysql的存储过程: Create procedure p()Begin End;

delimiter //

create procedure math_demo()begin

declare i int default 0;

declare d decimal(10,4)default 0;

declare f float default 0;

while i < 10000 do

set d = d +.0001;

set f = f +.0001E0;

set i = i + 1;

end while;

select d,f;end // call math_demo();

mysql中的自定义方法的使用 delimiter // create function function_name()returns return_type;begin

end;// 执行mysql自定义的函数用 Select function_name();

#mysql中的存储过程 delimiter //

create procedure math_demo()begin

declare i int default 0;

declare d decimal(10,4)default 0;…….return return_value;

declare f float default 0;

while i < 10000 do

set d = d +.0001;

set f = f +.0001E0;

set i = i + 1;

end while;

select d,f;end // call math_demo();// delimiter // create function xiaoxiao()returns int begin return 2;end;// #在mysql中创建的自定义函数要加的delimiter,都要一次性选中执行。每条语句都要用分号结束。delimiter // create function xiaoxiao1()returns int begin return 2;end // #执行mysql中的自定义函数 select xiaoxiao1();

根据一个布尔值来检验一个值,在这里布尔值可以是true,false,unknown;

运算符: 等号:=,<=>,不等号:!=,<>;赋值号::=; XOR

逻辑XOR。当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1,否则为 0。

a XOR b 的计算等同于(a AND(NOT b))OR((NOT a)和 b)。

Coalesce();函数的使用方法:

返回值为列表中第一非null值,在没有非null值的情况下返回null。

Greatest();函数的使用及功能说明:

当函数有2个或者2个以上的参数时,返回参数中的最大参数值,比较参数所依据的规律同least()函数相同。

Interval();函数的使用及功能说明: INTERVAL(N,N1,N2,N3,...)

假如N < N1,则返回值为0;假如N < N2 等等,则返回值为1;假如N 为NULL,则返回值为-1。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足 N1 < N2 < N3 < ……< Nn。其原因是使用了二分查找(极快速)。

Least();函数的使用及功能说明: · LEAST(value1,value2,...)

在有两个或多个参数的情况下,返回值为最小(最小值)参数。用一下规则将自变量进行对比:

o 假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。

假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。

o 假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。

o 在其它情况下,将参数作为区分大小写的字符串进行比较。o

假如任意一个自变量为NULL,则 LEAST()的返回值为NULL。

二,控制流函数 Case的使用: 格式1: Case value

when [compare_value] then result_value when [compare_value2] then result_value2 else result_value3 end

格式2: case when value=[compare_value1] then result_value else result_value2 end

 IF(expr1,expr2,expr3)

如果 expr1 是TRUE(expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2;否则返回值则为 expr3。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定。

ASCII()函数查看对应符号的ascii码。

第三篇:计算机二级《MySQL数据库程序设计》知识点总结

MySQL知识点总结

.数据操作:检索、排序、过滤、分组、汇总、计算、联接、子查询与组合查询.表操作:表的创建、修改、删除和重命名、表数据的插入、更新和删除.索引(含主、外键)、视图

.难度编程:存储过程与存储函数、触发器与事件、PHP.数据库管理:事务处理、用户与权限、备份与还原、数据库维护

1.检索数据:select„from„

Select [distinct] prod_id,prod_name from products [limit 4,5];2.检索排序:order by„

Select * from products order by prod_id [asc|desc],prod_name [asc|desc];3.过滤数据:where 字句

= <>!= >>= <<= between(1)普通where 字句

Select prod_id,prod_name from products where prod_name=’liyang’;Select prod_id,prod_name from products where prod_id between 10 and 50;Select prod_id,prod_name from products where prod_name is [not] null;(2)组合where字句:使用AND和OR连接多个条件表达式,且AND次序优于OR;(3)IN 与NOT操作符

Select prod_id,prod_name from products where prod_id [not] in(1,2,3)|prod_name in(’zhangsan’,’lisi’,’wangwu’);(4)LIKE操作符与通配符:“%”与“_”

Select prod_id,prod_name from products where prod_name like ’%liu%’;Select prod_id,prod_name from products where prod_name like ’_u%’;找出u位于名字的第二个位置的prod_id和prod_name。(5)正则表达式 4.计算字段

(1)拼接字段:concat(„,„)Select concat(姓氏,名字)as 姓名 from orders;Select concat(vend_name,’(’,vend_country,’)’)from vendors;(2)算术运算

Select prod_name,prod_price,prod_num,prod_price*prod_num as prod_money from products;4.使用数据处理函数:文本处理函数、日期和时间处理函数、数值处理函数。5.汇总数据:聚集函数 SUM()AVG()COUNT()MAX()MIN()Select avg(distinct prod_price)from products;Select avg(prod_price)均价,max(prod_price)最高价 from products;6.分组数据:group by„ 创建分组、过滤分组、分组排序

Select count(prod_id),prod_id from products where prod_id>1000 group by prod_id having count(prod_id)>2 order by prod_id;求出prod_id大于1000且产品数量大于2的产品数量,并按prod_id排序,注意分组语句中对象要前后一致,如下划线部分。7.使用子查询:进行过滤select„where„in(select„where„in(select„))、作为计算字段使用子查询。8.联接:join„on„(1)普通联接

Select oi.order_num,oi.prod_id,p.prod_name,p.vend_id,v.vend_name from orderitems oi join products p on oi.prod_id=p.prod_id join vendors v on p.vend_id=v.vend_id where vend_name=’liyang’;可同时联接多个表且可同时用于数据过滤,这种类型的联接一般为内部联接。

(2)自联接:一个表自己与自己联接,注意判断好各字段与前后两个表的关系。(3)自然联接:基本上简历的内部联接都是自然联接。

(4)外部联接:在关系表中没有关联的信息的行也能显示出来的联接,根据表在join字句的左边还是右边可分为左联接与右联接。(5)带聚集函数的联接

Select c.cust_id,count(o.order_num)num_ord from customers c join orders o on c.cust_id=o.cust_id order by c.cust_id;找出客户对应的订单数。

9.组合查询:连接多个(至少两个)查询语句,满足其中一个查询语句条件的结果都会显示出来 union(不重复显示)/union all(可重复显示即全部显示)Select vend_id,prod_id,prod_price from products where prod_price<=5 Union [all] Select vend_id,prod_id,prod_price from products where vend_id in(1001,1002)order by prod_id;注意每个查询必须包含相同的列、表达式或者聚集函数,列的数据类型必须兼容,排序语句只能放在最后面,该排序语句对组合查询语句中的所有select语句都适用。10.全文本搜索:只支持引擎为MyISAM的表,不支持引擎为InnoDB的表,可对搜索结果进行智能排序后输出,具有较高等级的行先返回。

Match(全文本搜索字段)against(’全文本搜索内容’[with query expansion])其中下划线部分为拓展语句,使用该语句,除了可以返回符合所设置的“全文本搜索内容”的数据结果,还可返回与“全文本搜索内容”有较高相似度的数据结果。(1)启用全文本搜索支持

Create table fs(id int not null primary key,c text,c1 text,fulltext(c,c1))engine=MyISAM;(2)进行全文本搜索

Select note_text from productnotes where match(note_text)against(’liyang’ with query expansion);11.插入数据:insert into„{values|select}„

Insert into products(prod_id,prod_name,prod_price)values(1,’豆浆’,2),(3,’鸡蛋’,1);可同时插入多行数据。

Insert into products(prod_id,prod_name,prod_price)select vend_id,vend_name, vend_price from vendors where vend_id<=10;12.更新数据:update [ignore]„set„,一般情况下,若更新的数据中有部分数据出错,则全部数据返回到原来的数据,而ignore的作用在于即使更新的数据中出现错误,只对出现错误的数据返回到原来数据,而未出现错误的数据返回更新后的结果实现更新。update products set prod_name='馒头',prod_price=1 where prod_id=1;update customers set cust_city=concat(cust_city,’市’)| cust_city =replace(cust_city,’市’,’city’)where cust_id>1000;13.删除数据:delete from„ Delete from products where prod_id between 10 an 50;14.表的相关操作

(1)创建表:对表结构进行设置create table„

Create table products(prod_id int null auto_increment primary key,prod_name varchar(50),prod_price int,prod_city varchar(50)default ’广州’)engine= InnoDB;每个字段名后需要设置数据类型,default为指定默认值,只支持常量不支持函数,且只在插入数据时起作用而在更新数据时不起作用,InnoDB是一个可靠的事务处理引擎,但不支持全文本搜索。

(2)更新表:对表结构进行修改 alter table {add|drop}„

Alter table products add prod_city varchar(50); Alter table products drop prod_price;(3)删除表:一旦删除,无法撤销 drop table„

Drop table products;(4)重命名表:rename table„to„

Rename table products to new_products;15.索引的相关操作

(1)创建索引:常用于数据的快速检索,MySQL中,常用索引在物理可分为:BTREE、HASH索引两类;在具体用途上可分为:INDEX、UNIQUE、PRIMARY KEY、FOREIGN KEY、FULL TEXT、SPATIAL等。

1使用create index 语句创建索引,对已存在的表创建索引 ○Create [unique|fulltext|spatial] index index_name [using BTREE|HASH] on tbl_name(index_col_name[,index_col_name„]);Create unique index index_products on products(prod_name(2)desc,prod_price);2使用create table 语句创建索引,创建表的同时创建索引 ○Create table seller(seller_id int not null auto_increment,seller_name char(50),seller_adress char(50),seller_contact char(50),product_type int,sales int,primary key(seller_id,product_type),[unique|fulltext|spatial] index index_seller(sales));3使用alter table语句创建索引,修改表的同时添加索引 ○Alter table tbl_name add {[unique|fulltext|spatial] index index_tbl_name(字段名)|primary key(字段名)|foreign key(字段名)references elsetbl_name(相同字段名)};(2)查看索引:Show index from tbl_name [where expr];(3)删除索引:drop index index_nameon tbl_name语句或alter table语句

Drop index index_name on tbl_name;Alter table tbl_name drop {[unique|fulltext|spatial] index index_tbl_name(字段名)|primary key(字段名)|foreign key(字段名)references elsetbl_name(相同字段名};(下划线部分不确定)16.视图的相关操作

视图:虚拟的表,视图本身不包含表中的列和数据,它包含只是一个SQL查询,常用于 检索数据。*视图的作用与规则。(1)创建视图:Create view view_name as select„[where„];Create view view_products as select prod_id,prod_name,prod_price,prod_num, prod_price*prod_num as prod_money from products where prod_id<=10 [with check option];--下划线部分表示今后对该视图数据的修改都必须符合prod_id<=10(2)查看视图(用法同表): select * from view_name;(3)删除视图:drop view view_name;17.完整性:实体完整性(主键与候选键)、参照完整性(主键与外键)、用户定义的完整性(非空约束与check约束)。

18.创建主键约束:create table语句或alter table语句

Create table products(prod_id int not null auto_increment primary key,c int);作为列的主键约束;

Create table products(prod_id int not null auto_increment,c int,c1 int,primary key(prod_id));作为表的主键约束,且复合主键职能用这种形式创建 Alter table products add primary key(prod_id);备注:实体完整性通过主键约束与候选键约束来实现,候选键约束的创建类似主键约束的创建,实质上同索引。

19.设置表外键:create table语句或alter table语句,外键中列的数目和数据类型必须与被参照表的主键中列的数目和对应数据类型一致。

alter table tbl_name add [constraint fk_name] foreign key(„)references„ Create table products(prod_id int not null auto_increment,c int,c1 int,foreign key(prod_id)references customers(prod_id));alter table products add constraint fk_products_cust foreign key(cust_id)references cust(cust_id);20.存储过程:为了以后的使用而保存的一条或多条SQL语句的集合

--建立存储过程:建立一个可通过输入item_id,输出对应订单总金额的存储过程->Delimiter //--改变分割符为//->create procedure ordertotal(in o_id int,out o_total decimal(10,2))过程名字输入参数及类型输出参数及类型->begin->select sum(item_price*item_num)from orderitems where item_id=o_id into o_total;->if o_total is null then->select ’不存在该订单号’;->end if;->end;->//--执行存储过程:当item_id=200005时,得出对应订单总金额->delimiter;--将分割符改回分号->call ordertotal(200005,@total);--由于不存在输出参数,故定义一个输出变量,变量必须用@开头->select @total;返回结果为149.87 备注:书本第十一章后的编程题,使用update语句,两个参数类型都需要为in。--显示存储过程->Show create procedure ordertotal;--删除存储过程

->Drop procedure ordertotal;21.存储函数

存储函数与存储过程的区别:.存储函数不能拥有输出参数;.存储函数可直接调用,且不需使用call语句,而存储过程的调用必须使用call语句;.存储函数中必须包含一条return语句,而这条特殊的SQL语句不允许包含于存储过程。--建立存储函数:根据给定的cust_id返回客户所在的州名(缩写),若库中无给定的cust_id,则返回“不存在该客户”。->delimiter //->create function fn_search(c_id int)->returns varchar(50)--定义返回的数据类型,与函数部分中的数据类型需统一,如函数中的“不存在该客户”为6个字符,如果这里设置为char(5),则无法输出该结果->deterministic– 表示对于相同的输入值,返回值也相同->begin->declare state char(2);--声明一个变量state,作为输出的州变量->select cust_state from customers where cust_id=c_id into state;->if state is null then->return(select ’不存在该客户’);--注意这里return不用加s->else->return(select state);->end if;->end;->//--执行存储函数

->select fn_search(10001);--删除存储函数

->drop function fn_search;--删除前要确定该函数无依赖关系,即不存在其他存储过程或存储函数调用过该存储函数。

22.触发器:MySQL响应insert、delete、update语句时自动执行的一条MySQL语句,创建触发器时需要给出的4条信息:唯一的触发器名、触发器相关的表、触发器应该响应的活动(insert delete、update)、触发器何时执行(处理前或处理后)。

(1)insert触发器:当对表插入数据时起作用,含有一个虚拟表New,可访问增加的行,只能用after--建立一个insert触发器,用于记录insert语句操作时的系统时间和插入的order_num->delimiter //->create trigger trg_order_insert after insert on orders for each row 触发器 触发器名 执行时间 相关表->begin->insert into order_log(o_date,order_num)values(now(),new.order_num);--order_log是事先建立好的表,用于记录insert语句操作时的系统时间和插入的order_num->end;->//--执行insert触发器->delimiter;->insert into orders(order_date,cust_id)values(’2010-9-15’,10001);--由于order_num是自动递增的,故在这里不作为插入对象(2)delete触发器:当对表删除数据时起作用,含有一个虚拟表Old,可访问被删除的行,只能用after,创建方法与insert类似,区别在于delete和old--建立一个delete触发器,用于记录delete语句操作时的系统时间和删除的order_num->delimiter //->create trigger trg_order_delete after delete on orders for each row 触发器 触发器名 执行时间 相关表->begin->insert into order_log(o_date,order_num)values(now(),old.order_num);--order_log是事先建立好的表,用于记录delete语句操作时的系统时间和删除的order_num->end;->//--执行delete触发器->delimiter;->delete from orders where order_num=20010;(3)update触发器:当对表修改数据时起作用,同时含有new和old两个虚拟表。结合New可访问更新行的记录;结合old可访问更新前行的记录,可用after,也可用before。1用after ○--建立一个update触发器,用于记录update语句操作时的系统时间和更新数据的order_num->delimiter //->create trigger trg_order_update after update on orders for each row 触发器 触发器名 执行时间 相关表->begin->insert into order_log(o_date,order_num)values(now(),old.order_num);->end;->//--执行update触发器->delimiter;->update orders set order_date=’2015-9-18’ where cust_id=10001;2用before ○--建立一个update触发器,如果更新后的prod_price大于原来的1.2倍,则用原来的1.2倍作为当前价格->delimiter //->create trigger trg_order_update before update on orders for each row 触发器 触发器名 执行时间 相关表->begin->if new.prod_price>old.prod_price*1.2 then->set new.prod_price=old.prod_price*1.2;->end if;->end;->//(4)删除触发器:drop trigger trg_name;23.事件:临时触发器,要使用事件调度器,必须开启“event_scheduler”.查看:show variables like ’event_scheduler’;.开启:set global event_scheduler=1;(1)创建事件

CREATE EVENT EVENT_NAME ON SCHEDULE schedule DO event_body;其中schedule的语法格式为

AT timestamp [+INTERVAL interval]„|every interval--指定事件执行的时间,可以为某时刻点即timestamp,或某时刻点开始的interval时间后,或者为每隔interval时间执行一次

[starts timestamp [+INTERVAL interval]]--设置事件开始执行的时间 [ends timestamp [+INTERVAL interval]]--设置事件终止执行的时间

--建立一个事件,用于每个月向customers表中插入一条数据“liyang、广州”,该事件从下个月开始并于2015-12-31结束->delimiter //->create event event_insert on schedule every 1 month->starts curdate()+interval 1 month->ends ’2015-12-31’->do->begin->if year(curdate())<2015 then->insert into customers(cust_name,cust_adress)values(’liyang’,’广州’);->end if;->end;->//(2)修改事件,用于修改时间的状态:alter event event_name{enable|disable};(3)删除事件:drop event event_name;24.管理实务处理:start transaction„

实务处理的术语:

(1)实务(transaction):一组SQL语句;(2)回退(rollback):撤销指定SQL语句的过程;(3)提交(commit):指定未存储的SQL语句结果写入到数据库表里,提交后无法回退;(4)保留点(savepoint):实务处理中设置的临时占位符。

25.安全管理(用户创建修改与删除以及用户权限的查看设置与撤销)(1)创建用户账号:create user ben identified by ’ben’;(2)修改用户账号:update mysql.user set user=’new_ben’ where user=’ben’;--从mysql数据库中的用户表user进行修改(3)查看访问权限:show grants for new_ben;(4)设置访问权限:grant„to„.grant {all|select,update,delete,insert}on {*.*|crashcourse.*|crashcourse.cus tomers} to new_ben;.grant select(cust_id,cust_name)on crashcourse.customers to new_ben;--可针对{整个服务器|整个数据库|数据库中某个表|数据库中某个表的某些字段},对用户同时设置全部或一种或多种权限

(5)撤销访问权限:revoke„from„,用法与grant„to„类似(6)更改口令(密码)

Set password for new_ben=password(’new_ben’);(7)删除用户:drop user new_ben;26.数据库备份与还原.使用SQL语句

backup table tbl_name to„/restore table tbl_name from„(只用于MyISAM表)select„intooutfile„/load data„infile„into table tlb_name.使用命令行实用程序:mysqlhotcopy(只用于MyISAM表)或mysqldump/mysql(1)使用select„intooutfile„/load data„infile„into table tlb_name.备份数据:

Select * from mysql.products into outfile ’d:products.txt’ [Fields terminated by ’,’ optionally enclosed by ’”’

lines terminated by ’nr’;--定义字段间的分割符、字符型数据的存放形式、行与行之间的分割符.恢复数据

Load data infile ’d:products.txt’into table customers.copy [Fields terminated by ’,’ optionally enclosed by ’”’

lines terminated by ’nr’;--必须与备份时一致(2)使用命令行实用程序mysqldump/mysql(文本形式)

进入cmd运行界面(mysqldump—help 可用于获取mysqldump的选项表及更多帮助信息).备份整个数据库服务器、或整个数据库或数据库中某个表

Mysqldump –u root –proot –P 3306 –h localhost {all-databases|mysql_test [products]}>d:data.sql.恢复数据

Mysql –u root –proot –P 3306 –h localhost {all-databases|mysql_test [products]}

(1)analyze table tbl_name;更新表的索引散列程度,检查表键是否正确(2)check table tbl_name;检查一个或多个表是否有错误

(3)checksum table tbl_name;对数据库中的表进行校验,保证数据的一致性

(4)optimize table tbl_name;利用表中未使用的空间并整理数据文件碎片,保证数据读取效率

(5)repair table tbl_name;修复一个或多个可能被损害的MyISAM表 28.二进制日志文件的使用:mysqlbinlog

29.使用PHP进行MySQL数据库编程 编程步骤:

.首先建立与MySQL数据库服务器的连接;.然后选择要对其进行操作的数据库;

.再执行相应的数据库操作,包括对数据的添加、删除、修改和查询等;.最后关闭与MySQL数据库服务器的连接。(1)数据库服务器连接、选择数据库

.使用mysql_connect()建立非持久连接 ”;die();} echo “数据库服务器连接成功!
”;?> //将connect.php部署在已开启的WAMP平台环境中,并在浏览器地址中输入“http://localhost/connect.php”

.使用mysql_pconnect()建立持久连接 ”;echo “用户名:root
”;echo “使用函数mysql_pconnect()永久连接数据库。
”;?>

.使用mysql_select_db(databases[,connection])选择数据库 ”;die();} mysql_select_db(“mysql_test”,$con);if(mysql_errno()){ echo “数据库选择失败!
”;die();} echo “数据库选择成功!
” ?>(2)数据的添加、更新和删除操作,mysql_query(SQL语句[,connection]),insert、update、delete语句可置于函数mysql_query()中从而实现数据的添加、更新和删除操作.数据的添加

/*向数据库mysql_test中的表customers添加一个名为“李中华”的客户的全部信息*/ ”);Mysql_select_db(“mysql_test”,$con)or die(“数据库选择失败!
”);Mysql_query(“set names ’gbk’”);//设置中文字符集

$sql=“insert into customers(’cust_id’,’cust_name’,’cust_sex’)”;$sql=$sql.“values(null,’李中华’,’M’)”;if(mysql_query($sql,$con))echo “客户信息添加成功!
”;else echo “客户信息添加失败!
”;?>

.数据的更新

/*将数据库mysql_test的表customers中的一个名为“李中华”的客户的地址修改为“广州市”*/ ”);Mysql_select_db(“mysql_test”,$con)or die(“数据库选择失败!
”);Mysql_query(“set names ’gbk’”);$sql=“update customers set cust_address=’广州市’”;$sql=$sql.“where cust_name=’李中华’”;if(mysql_query($sql,$con))echo “客户地址修改成功!
”;else echo “客户地址修改失败!
”;?>

.数据的删除

/*将数据库mysql_test的表customers中一个名为“李中华”的客户信息删除*/ ”);Mysql_select_db(“mysql_test”,$con)or die(“数据库选择失败!
”);Mysql_query(“set names ’gbk’”);$sql=“delete from customers”;$sql=$sql.“where cust_name=’李中华’”;if(mysql_query($sql,$con))echo(“客户信息删除成功!
”);else echo(“客户信息删除失败!
”);?>

(3)数据库的查询

.使用mysql_fetch_array(data[,array_type])读取结果集中的记录

/*在数据库mysql_test的表customers中查询cust_id为916的客户的姓名*/ ”);Mysql_select_db(“mysql_test”,$con)or die(“数据库选择失败!
”);Mysql_query(“set names ’gbk’”);$sql=“select cust_name from customers”;$sql=$sql.“where cust_id=916”;$result=mysql_query($sql,$con);if($result){ echo “客户查询成功!
”;$array=mysql_fetch_array($result,MYSQL_NUM);if($array){ echo “读取到客户信息!
”;echo “所要查询客户的姓名为:”.$array[0].“
”;} else echo “未读取到客户信息!
”;} else echo “客户查询失败!
”;?>

.使用mysql_num_rows(data)读取结果集中的记录数

/*在数据库mysql_test的表customers中查询女性客户的人数*/ ”);Mysql_select_db(“mysql_test”,$con)or die(“数据库选择失败!
”);Mysql_query(“set names ’gbk’”);$sql=“select * from customers”;$sql=$sql.“where cust_sex=’F’”;$result=mysql_query($sql,$con);if($result){ echo “查询成功!
”;$num=mysql_num_rows($result);//如果结果为空,则为0行 echo “所要查询的女性客户人数为:”.$num.“位
”;} else echo “查询失败!
”;?>

第四篇:mysql问题解决总结

MySql问题解决总结

ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: YES)ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: NO)

这种问题就是mysql密码需要重置; 重置方式:

1.打开/etc/mysql/debian.cnf文件,里面存储了相关的密码,我的文件信息如下

sudovi /etc/mysql/debian.cnf# Automatically generated for Debian scripts.DO NOT TOUCH![client] host = localhost user = debian-sys-maint password = 6x1XG2B5p75WtFV2 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = 6x1XG2B5p75WtFV2 socket = /var/run/mysqld/mysqld.sock basedir = /usr 在[client]段有user=以及password=这两行,这就是通过apt-get安装mysql,系统给我们设置的mysql登录名和密码

2.输入命令: mysql-udebian-sys-maint-pdebian-sys-maint即debian.cnf中user=后面的内容.回车后会提示输入密码,此时把password=后面的内容复制粘贴后回车即可进行mysql 控制台

3.进入控制台后.按以下步骤进行: use mysql;update user set password=PASSWORD('新密码')where user='root';FLUSH PRIVILEGES;此时可以输入quit;退出后用root帐号登录,也可以继续其他操作.

第五篇:mysql数据库要点总结

查询(R)Selec子句

书写顺序

Select distinct:要返回的列或表达式 From:从中检索数据的表 Where:行级过滤/分组前过滤 group by:分组说明

having:组级过滤/分组后过滤 order by:输出排序顺序desc/asc limit start, count:要检索的行数 limit 3,4 从第3行开始的连续4行

SELECT order_num,sum(quantity*item_price)ordertotal FROM orderitems WHEREorder_numBETWEEN20005AND 20009GROUP BY order_num HAVINGsum(quantity*item_price)>=50ORDER BYordertotalDESCLIMIT4;执行顺序

From表名->inner/left/right/ join on->where->group by->select distinct *->having->order by->limit start, count 插入Insert into(C)INSERT INTO students(name)values(‘杨过’),(‘小龙女’);更新(U)Update UPDATE customers SETcust_email = ‘elmer@fudd.com’WHEREcust_id = 10005;删除(D)Delete DELETE FROM customers WHEREcust_id = 10006;Truncate删除原来的表并重新创建一个表,删除标的全部内容时效率高。

操作表

创建CREATE TABLE customers(Cust_idint not null auto_increment primary key,Cust_name char(50)not null,Cust_addresschar(50)null)engine = innoDB;更新ALTER TABLE删除DROP TABLEcustomers2;重命名RENAME TABLE customers2 TO customers;操作数据库

创建CREATE DATABASE xxx charset = utf8;删除DROP DATABASEXXX;切换USE XXX;查看SHOW DATABASES;关联查询

INNER/LEFT/RIGHTJOIN ON SELECT students.name,subjects.title,scores.scoreFROM scores INNER JOIN students ONscores.stuid = students.id INNER JOIN subjects ONscores.subid = subjects.id;

下载MySql知识点总结word格式文档
下载MySql知识点总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    MySQL学习心得

    MySQL学习心得 第一章 一、数据库管理系统(DBMS)是操作和管理数据库的大型软件,它按一定的数据模型组织数据。 例如:Oracle、SQL Server、MySQL、Access。 二、数据库应用系统在......

    php mysql学习总结剖析

    php 字符串 反引号里面的字符必须是命令 如`pwd` 是查看当前目录 转移字符: 符号 含义” 双引号 反斜线n 换行 t 跳位(Tab) 常量和变量 _FILE_ 这个默认常量是php程......

    mysql 5.0存储过程学习总结

    mysql 5.0存储过程学习总结 一.创建存储过程 1.基本语法: create procedure sp_name begin end 2.参数传递 二.调用存储过程 1.基本语法:call sp_name 注意:存储过程名称......

    mysql教案讲解

    1、数据库概述 1.1 什么是数据库 数据库DataBase 就是一个存储数据的仓库。 为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可有效地组......

    Mysql数据库学习心得

    Mysql数据库学习心得 由于工作中需要使用mysql,笔者通过网上学习,动手实践,终于从一个"数据库菜鸟"变成了能熟练操作mysql的"准大虾"了,:)。现将学习心得整理如下。 MySQL是完......

    MySQL数据库连接超时(Wait_timeout)问题总结

    当应用程序和数据库建立连接时,如果超过了8个小时,应用程序不去访问数据库,数据库就会出现断掉连接的现象 。这时再次访问就会抛出异常. 一般的解决方法大多是在数据库连接字符......

    我的MYSQL学习心得

    我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQ......

    我的MYSQL学习心得

    我的MYSQL学习心得 一、使用视图的理由是什么? 1.安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到了一个特......