MySQL Basic

数据类型:
  • 字符串: CHAR(n)、VARCHAR(n);
  • 文本:TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT;
  • 整型;TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT;
  • 浮点数:FLOAT(4) DOUBLE(8) DECIMAL REAL;
  • 二进制(可用来存储图片、音乐等): TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB;
  • 日期和时间:DATE/TIME/DATETIME/TIMESTAMP/YEAR
    YEAR:范围1901~2155;尽量用四位数字或字符串表示;二位有歧义;
基本操作命令:
system clear						    #清屏语句,Linux下
sudo service mysql restart     			#重启服务
net start wampmysqld64					#Windows下
net stop wampmysqld64          			
mysql [-h hostname] –u root –p 			#命令行登陆(以root身份登录):
show engines 				   			#存储引擎
show variables like '%storage_engine%'  #默认引擎
Source dir/xx.sql                       #MySQL命令行运行外部脚本文件
ALTER DATABASE mydb2 character set utf8   #修改编码,注意mysql中utf-8编码不带“-”

create database mydb2;					#创建数据库
drop database db_name;  			    #删除数据库
show databases;						    #查看所有数据库
use db_name;						    #选择数据库
show tables;							#显示所有的表

create table tbl_name2				     #设置主键,创建索引
(
id  int(11) PRIMARY KEY,
field1  varchar(25),
field2 float,
field3 int(11)
),INDEX index_name (title(length));

create table tbl_name3
(
id  int(11),
field1  varchar(25),
field2 float,
field3 int(11),
PRIMARY KEY(id)
),UNIQUE indexName (title(length));

create table tbl_name4                #联合主键
(
field1  varchar(25),
field2 float,
field3 int(11),
PRIMARY KEY(field1,field2)
);

create table tbl_name                  #外键
(
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float,
constraint fk_depId foreign key(deptId) references tb_dept1(id)
);

# 建表之后添加外键
# 适用于[父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败]的情况
alter table configure_key_value add foreign key(conf_biz_id) references configure_business(id) 
on update cascade on delete restrict;       

desc tbl_name;                          #显示表结构
describe tbl_name;
show columns from tbl_name;
show create table tbl_name;				#显示建表语句
drop table tbl_name;					#删除表
alter table tbl_name add field_name varchar(20) not null;
alter table wst_orders add(role text ,account text);	    #增加字段
alter table tbl_name drop column field_name;                #删除字段

update test set salary = salary+1 where address='shandong';						   #按条件更新记录
insert into tbl_name(field1,field2) values(value1,value2),(value11,value22);   #插入记录,可多条
delete from emp where ename='lisa' and sal=5000;  #删除记录

SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter' #按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录

SELECT * FROM from_data  LIMIT  nNumRecord   OFFSET nBaseRow
#表示从第nBaseRow行(基于0的索引)(包括该行)开始,取其后的nNumRecord  条记录

##copy表的数据到另一张表
insert into db1.table1 select * from db2.table2             #完全复制,Query OK
insert into db1.table1 select distinct * from db2.table2    #不复制重复纪录,未测试
insert into db1.table1 select top 5 * from db2.table2       #前五条纪录,测试提示错误
# mysql5.7 change passord
> update mysql.user set authentication_string=password('新密码') where user='用户';
> flush privileges;

create table new_table_name select * from exist_table   # 从select语句创建新的数据表 

存储引擎

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个存储引擎,这两种引擎类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB更快,而InnoDB提供事务支持以及外部键等高级数据库功能。
show engines
可以看到只有InnoDB支持Transactions和Savepoints。

Alias

SQL 语句中,可以为表及字段(列)指定别名(Alias),别名是 SQL 标准语法,几乎所有的数据库系统都支持。通过关键字 AS 来指定。
使用表别名查询:

  • 可以使 SQL 变得简洁而更易书写和阅读,尤其在 SQL 比较复杂的情况下;
  • 另外除了使用别名来简化 SQL 外,有些时候一个表做自身关联时,必须要使用别名来当作两个表进行关联操作。

该处是thinkPHP的model中引用的模型的一个例子

$sql = 
SELECT shopId,shopSn,shopName,u.userName,shopAtive,shopStatus,gc.catName 
FROM
__PREFIX__shops s,__PREFIX__users u,__PREFIX__goods_cats gc
WHERE
gc.catId=s.goodsCatId1 AND s.userId=u.userId AND shopStatus=1 and shopFlag=1
匹配模式

MySQL中的LIKE关键字与匹配模式联合使用,用于确定所有符合给定匹配模式的记录。匹配模式类似正则表达式,它本身是一个字符串,这个字符串中的字符描述了某种句法规则。匹配模式中可以包括常规字符与通配符。

  • % 表示零个或者多个任意字符,例如“s%”表示以s开头的任意字符串,“%s%”表示包含字符s的任意字符
    SELECT * FROM products AS p WHERE p.prod_name LIKE 'jet%';
  • 匹配任意单个字符,例如“sm”表示任何以“sm”开头的长度为3的字符串,支持中文,可以对应任意一个中文字符
    如果匹配模式中没有包含通配符,则与使用“=”的运算效果是相同的。
    SELECT * FROM products AS p WHERE p.prod_name LIKE '_ ton anvil%';
正则表达式:REGEXP

SELECT* FROM products WHERE prod_name REGEXP ‘.000’ ORDER BY prod_id DESC;

多表查询
  • tbl_a LEFT JOIN tbl_b ON conditon
    包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
select c.cust_id,o.order_num
from customers c left join orders o on c.cust_id=o.cust_id where o.order_num is null; #查询存在于左表而不存在于右表中的数据
  • tbl_a RIGHT JOIN tbl_b ON condition
    与左外连接对称
  • tbl_a INNER JOIN tbl_b ON condition
    只连接匹配的行,等价于直接查,可以省略inner join
select vend_name, prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
select vend_name, prod_name,prod_price from vendors , products where vendors.vend_id = products.vend_id; #两句效果一样的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值