MySQL Basic

来源:互联网 发布:知乎 openstack 集群 编辑:程序博客网 时间:2024/06/17 09:24

数据类型:

  • 字符串: 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));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 OKinsert into db1.table1 select distinct * from db2.table2    #不复制重复纪录,未测试insert into db1.table1 select top 5 * from db2.table2       #前五条纪录,测试提示错误

存储引擎

  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 gcWHEREgc.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_numfrom 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; #两句效果一样的
原创粉丝点击