MySQL基础笔记
一、登录参数
-D 打开指定数据库
-h 服务器名称
-p 密码
-P 端口
-u 用户名
-V 输出版本信息并退出
--prompt 提示符 mysql> ,或者登陆后 用prompt命令
提示符:
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户
二、常用命令
1.显示当前服务器版本
select version();
2.显示当前时间
select now();
3.显示当前用户
select user();
4.显示当前用户打开的数据库
select database();
5.字符连接
select concat('a','b');
6.使用指定分隔符连接
select concat_ws('-','a','b');
7.数字格式话
select format(20.25,);
8.转小写
select lower('MYSQL');
9.转大写
select upper('mysql');
10.左截取
select left('mysql',);
11.右截取
select right('mysql',);
12.获取字符串长度
select length('mysql');
13.删除左字符
select ltrim(' mysql');
14.删除右字符
select rtrim('mysql ');
15.删除左右字符
select trim(leading '-' from '-mysql');
16.替换字符
select replace('-my-sql','-','+');
17.截取字符
select substring('mysql',,);
18.进一取整
select ceil(3.99);
19.去尾取整
select filoor(3.01);
20.整数除法
select div ;
21.取余数
select mod ;
22.幂运算
select power(,);
23.四舍五入
select round(3.5);
24.数字截取
select truncate(20.235,);
25.在范围内
[not] between...and...
26.在列出值范围内
[not] in()
25.为空
is [not] null
26.当前日期
select curdate();
27.当前时间
select curtime();
28.日期变化
select date_add('2015-2-12',interval - day);
29.日期差值
select datediff('2013-2-12','2015-2-12');
30.日期格式化
select date_fromat('2015-2-12','%Y-%m-%d');
31.连接id
select connection_id();
32.最后插入记录id
select last_insert_id();
33.平均值
select avg(age);
34.总数
select count(age);
35.最大值
select max(age);
36.最小值
select min(age);
37.和值
select sum(age);
38.更改客户端编码
set names utf8;
38.被影响的记录总数
select row_count();
39.查看状态
show status;
40.查看索引
show index from A;
41.查看数据库进程
show processlist;
三、操作数据库
1.创建数据库
create {database|schema} [if not exists] db_name [default] character set [=] charset_name
例:CREATE DATABASE test;
2.修改数据库
alter {database|schema} db_name [default] character set [=] charset_name
例:ALTER DATABASE test CHARACTER SET utf8;
3.删除数据库
drop {database|schema} [if exists] db_name
例:DROP DATABASE test;
4.查看库的信息
show create database db_name;
例:SHOW CREATE DATABASE test;
5.查看当前服务器下的数据库列表
show {databases|schemas} [like 'pattern'|where expr]
例:SHOW DATABASE test;
6.查看警告信息
show warnings;
四、操作数据表
1.打开数据库
use db_name;
例:USE test;
2.创建表
create table [if not exists] tbl_name(
age tinyint(2) unsigned not null auto_increment primary key
);
例:CREATE TABLE user(
id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,//主键自增
name VARCHAR(20) NOT NULL UNIQUE KEY,//唯一
price DECIMAL(8,2) UNSIGNED DEFAULT 0.00,//默认
cid INT(10) UNSIGNED,
KEY cid(cid),
FOREIGN KEY (cid) REFERENCES cate (id) ON DELETE CASCADE//外键 (删除时执行CASCADE)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.查看数据列表
show tables [from db_name] [like 'pattern'|where expr]
例:SHOW TABLES;
4.查看表信息
show create table tbl_name;
例:SHOW CREATE TABLE user;
5.查看表结构
(1)show columns from tbl_name;
例:SHOW COLUMUNS FROM user;
(2)desc tbl_name;
6.添加单字段
alert table tbl_name add [column] col_name column_definition [first|after col_name];
例:ALTER TABLE user ADD num INT(10) UNSIGNED;
7.添加多字段
alter table tbl_name add [column] (col_name column_definition,..);
例:ALTER TABLE user ADD num INT(10) UNSIGNED, time INT(10) UNSIGNED;
8.删除字段
alter table tbl_name drop [column] col_name,drop [column] col_name,...
例:ALTER TABLE user DROP num,DROP time;
9.修改字段定义
alter table tbl_name modify [column] col_name column_definition [first|after col_name]
例:ALTER TABLE user MODIFY num TINYINT(10) AFTER name;
10.修改字段名称
alter table tbl_name change [column] old_col_name new_col_name column_definition [first|after col_name]
例:ALTER TABLE user CHANGE price money INT(10);
11.修改表名称
(1)alter table tbl_name rename [to|as] new_tbl_name
例:ALTER TABLE user RENAME goods; (2)rename table tbl_name to new_tbl_name [,tbl_name2 to new_tbl_name2]
例:RENAME TABLE user TO goods;
12.插入记录
(1)insert [into] tbl_name [(col_name,..)] {values|value} ({expr|default},...),(...),...;
例:INSERT user (id,name,price) VALUES (DEFAULT,tom',20);
(2)insert [into] tbl_name set col_name={expr|default},..
例:INSERT user SET name='tom';
(3)insert [into] tbl_name [(col_name,...)] select ...
例:INSERT user SELECT id,name FROM goods;
13.更新记录
update [low_priority] [ignore] tbl_name set col_name1={expr1|default} [,col_name2={expr2|default}].. [where where_condition]
例:UPDATE user SET num = num + id;
14.删除记录(清空表)
delete from tbl_name [where where_condition]
例:DELETE FROM user WHERE id=3;
15.查找记录
select select_expr [,select_expr..]
[
from tbl_name
[where where_condition]
[group by {col_name|position} [asc|desc],...]
[having where_condition]
[order by {col_name|expr|position} [asc|desc],...]
[limit {[offset,] row_count|row_count offset of_set}]
]
16.多表更新
UPDATE user INNER JOIN cate ON user.cid=cate.id SET user.cname=cate.name;
17.创建表的同时将查询结果写入数据表
CREATE TABLE cate (
id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(10) NOT NULL
)
SELECT cid,cname FROM user GROUP BY cid;
18.修改表引擎
alter table tbl_name engine [=] engine_name
例:ALTER TABLE user ENGINE = MyISAM;
19.修改分隔符
delimiter $$
20.删除表
drop table A;
21.截断表
truncate A;
五、约束:
保证数据的完整性和一致性;
列级约束(针对一个字段),表级约束(针对多个字段)
1.主键约束:primary key
(1)每个表只存在一个
(2)保证记录的唯一性
(3)自动为not null
(4)添加主键约束:
alter table tbl_name add [constraint [symbol]] primary key [index_type] (index_col_name,...)
例:ALTER TABLE user ADD PRIMARY KEY (id);
(5)删除主键约束:
alter table tbl_name dro p primary key
例:ALTER TABLE user DROP PRIMARY KEY;
2.唯一约束:unique key
(1)每个表可存在多个
(2)保证记录的唯一性
(3)可以存一个null
(4)添加唯一约束:
alter table tbl_name add [constraint [symbol]] unique [index|key] [index_name] [index_type] (index_col_name,...)
例:ALTER TABLE user ADD UNIQUE (name);
(5)删除唯一约束:
alter table tbl_name drop {index|key} index_name
例:ALTER TABLE user DROP INDEX name;
(6)查看约束:
show indexes from tbl_name\G;
例:SHOW INDEXS FROM user\G;
3.默认约束:default
(1)添加删除默认约束:
alter table tbl_name alter [column] col_name {set default literal | drop default}
例:ALTER TABLE user ALTER num SET DEFAULT 0;
ALTER TABLE user ALTER num DROP DEFAULT;
4.非空约束:not null
5.外键约束:foreign key
保证数据的完整性和一致性;
实现1对1、多对1关系。
(1)cascade:从父表删除或更新且自动删除或更新子表中的匹配行
(2)set null:从父表删除或更新并设置子表中的外键列为null。如果使用该选项,必须保证子表没有指定not null
(3)restrict:拒绝对父表的删除或更新操作
(4)no action:标准sql的关键字,在mysql中与restrict相同
(5)添加外键约束
alter table tbl_name add [constraint [symbol]] foreign key [index_name] (index_col_name,...) reference_definition
例:ALTER TABLE user ADD FOREIGN KEY (cid) REFERENCES cate (id)
(6)删除外键约束:
alter table tbl_name drop foreign key symbol
例:ALTER TABLE user DROP FOREIGN KEY cid;
六、子查询:
嵌套在内部,始终出现在括号内;
可以包含多个关键字或条件,如distinct,group by,order by,limit,函数等;
外层可以是:select,insert,update,set,do
1.比较运算符:=,>,<,<=,>=,<>
select * from t1 where col_name1 >= ANY (select col_name2 from t2);
(1)any(some) :符合任一个
(2)all:符合所有
2.[NOT] IN/EXISTS
select * from t1 where col_name1 NOT IN ALL (select col_name2 from t2);
七、表连接
1.内连接(交集):inner join
2.外链接:
(1)左连接(左全及右符合):left join
(2)右连接(右全及左符合):right join
八、自定义函数
create function fun_name
returns
{string|int|real|decimal}
routine_body 例(无参数):
CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),'%Y-%m-%d'); 例(参数):
CREATE FUNCTION f2(num1 INT , num2 INT)
RETURNS DECIMAL(10,2)
RETURN (num1+num2)/2; 例(复合):
CREATE FUNCTION addusers(username VARCHAR(20))
RETURNS INT
BEGIN
INSERT user (name) VALUES (username);
RETURN LAST_INSERT_ID();
END
$$
九、存储过程
存储过程: procedure
概念类似于函数,就是把一段代码封装起来,
当要执行这一段代码的时候,可以通过调用该存储过程来实现.
在封装的语句体里面,可以用if/else, case,while等控制结构.
可以进行sql编程.
存储过程与自定义函数的区别
1.存储过程复杂,函数针对性强
2.存储过程返回多个值,函数返回一个值
3.存储过程独立执行,函数可作为其他sql语句的组成部分出现
创建:
create
[definer = {user|current_user}]
procedure sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body proc_parameter:
[in|out|inout] param_name type 调用:
call sa_name[()]; 修改:
alter procedure sp_name [characteristic ...]
comment 'string'
| {contains sql|no sql|reads sql data| modifies sql data} | sql security {definer|invoker} 删除:
drop procedure [if exists] sp_name; 例(无参数):
CREATE PROCEDURE sp1() SELECT VERSION(); 例(IN):
CREATE PROCEDURE sp2(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM user WHERE id=p_id ;
END
$$ 例(IN OUT):
CREATE PROCEDURE sp3(IN p_id INT UNSIGNED,OUT userNums INT )
BEGIN
DELETE FROM user WHERE id=p_id ;
SELECT COUNT(id) FROM users INTO userNums;
END
$$ 例(IN OUT):
CREATE PROCEDURE sp4(IN p_age INT UNSIGNED,OUT deleteUsers INT ,OUT userCounts INT)
BEGIN
DELETE FROM user WHERE age=p_age ;
SELECT ROW_COUNT() INTO deleteUsers;
SELECT COUNT(id) FROM users INTO userCounts;
END
$$
十、视图的定义:
视图是由查询结果形成的一张虚拟表.
视图的创建语法:
Create [algorethm=temptable] view 视图名 as select 语句;
1:可以简化查询
2:可以进行权限控制
3:大数据分表时可以用到
Merge: 当引用视图时,引用视图的语句与定义视图的语句合并.
Temptable:当引用视图时,根据视图的创建语句建立一个临时表
Undefined:未定义,自动,让系统帮你选.
十一、触发器:
作用: 监视某种情况并触发某种操作.
创建触发器的语法
Create trigger triggerName
After/before insert/update/delete on 表名
For each row #这句话是固定的
Begin
Sql语句; #一句或多句,insert/update/delete范围内
End; create trigger t1
after
insert
on order
for each row
begin
update goods xxx
end$
十二、事务的ACID特性
原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。
数据库事务的不可再分的原则即为原子性。
组成事务的所有查询必须:
要么全部执行,要么全部取消(就像上面的银行例子)。
一致性(Consistency):指数据的规则,在事务前/后应保持一致
隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.
持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消
查看更多:
MySQL优化
MySQL各存储引擎
MySQL锁详解
MySQL事务
MySQL索引类型
MySQL基础笔记的更多相关文章
- MYSQL基础笔记(六)- 数据类型一
数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...
- MYSQL基础笔记(五)- 练习作业:站点统计练习
作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...
- MYSQL基础笔记(四)-数据基本操作
数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...
- MYSQL基础笔记(三)-表操作基础
数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...
- MYSQL基础笔记(二)-SQL基本操作
SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...
- MYSQL基础笔记(一)
关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...
- MySQL基础笔记(六) 存储过程与函数
写在开头:本文所有的示例都是基于workers表,表中保存了某公司的员工姓名.性别.工资.年龄和居住城市,如下: +----+-----------+--------+--------+------+ ...
- MySQL基础笔记(五) 视图
一.什么是视图 视图是一个虚拟表.也就是说,视图在外观和行为上都类似于表,但它不需要实际的物理存储,只保存了视图定义(查询语句). 视图由select查询所定义 -- 当创建一个视图时,实际上是在数据 ...
- MYSQL基础笔记(七)- 数据类型二
字符串类型 在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set char,定长字符串 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度. ...
随机推荐
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- 阿里巴巴直播内容风险防控中的AI力量
直播作为近来新兴的互动形态和今年阿里巴巴双十一的一大亮点,其内容风险监控是一个全新的课题,技术的挑战非常大,管控难点主要包括业界缺乏成熟方案和标准.主播行为.直播内容不可控.峰值期间数千路高并发处理. ...
- iOS系列文章
本博客全为原创,如果借鉴了其他文章会在博文的下面进行说明.欢迎转载,但要在文章中给出原文链接,谢谢. 有链接的说明已经发布,没有链接的说明还没有发布. 并不是所有的博文都在这里罗列,有兴趣的可以看博客 ...
- SignalR系列目录
[置顶]用SignalR 2.0开发客服系统[系列1:实现群发通讯] [置顶]用SignalR 2.0开发客服系统[系列2:实现聊天室] [置顶]用SignalR 2.0开发客服系统[系列3:实现点对 ...
- .NET平台和C#编程的总结
第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework ...
- WebApi基于Token和签名的验证
最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...
- 真假4K电视验证:一张图足矣
国庆期间笔者逛了一下电视卖场,考虑到国内电视台以及宽带的情况,1080P至少还能用十年,所以只想要个2k电视就够了.然而事与愿违,卖场中八成的都是4k电视,清一色的4k电视让人眼花缭乱.难道4k面板技 ...
- 浅谈JSP注释
HTML注释 JSP文件是由HTML尿急和嵌入的Java程序片段组成的,所以在HTML中的注释同样可以在JSP文件中使用.注释格式:<!--注释内容--> <!-- 欢迎提示信息! ...
- jira的插件开发流程实践
怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...
- NYOJ 975
这道题一开始本着很朴素的想法就是先输入两头的数据,然后对每组的数据范围下测试中间的数据即可,但是是超时的.原因也很明显,比如计算1~1000的数据之后,假如下一组数据是1~1001,本来只需要多测试下 ...