mongodbOperator
mongodb创建数据库表语句
db.createCollection("CollectionName or tableName");
db.createCollection("ruiy",{id:1});
db.tableName.insert(id:1);
mongodb数据库数据删除
mongodb修改更新数据库记录
查询所有记录,行
简单条件查询
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。
以我们公司项目为例,在早期的项目中,都在使用关系型数据库,用过SQLServer,Oracle,DB2,后来全部转向Mysql,原因很简 单:Mysql在性能不错的情况下,有着开源优势。Mysql的事务性与高性能是我们主要考虑的。后来,由于项目要用到用户系统,即会有大量的用户数据进 行交互--海量存储,Mysql的读写速度会有一点瓶颈,于是我们就想到了最近发展很强势的Nosql。在Nosql早期的memcache的发展下,又 出现了很多非关系型数据库,比如redis,mongodb。经过一段时间的测试,redis与mongodb的读写速度确实比Mysql有着很明显的优 势。mongodb的写入速度大约2.5W/次每秒。
mongodb以BSON结构(二进制)进行存储,对海量数据存储有着很明显的优势。下面是Mongodb与Mysql的操作命令的对比
作用
MySQL
MongoDB
服务器守护进程
mysqld
mongod
客户端工具
mysql
mongo
逻辑备份工具
mysqldump
mongodump
逻辑还原工具
mysql
mongorestore
数据导出工具
mysqldump
mongoexport
数据导入工具
source
mongoimport
新建用户并授权
grant all on *.*
to username@'localhost'
identified by 'passwd';
db.addUser("user","psw")
db.auth("user","psw")
显示库列表
show
databases;
show
dbs
进去库
use
dbname;
use
dbname
显示表列表
show
tables;
show
collections
查询主从状态
show
slave status;
rs.status
创建库
create
database name;
无需单独创建,直接use进去
创建表
create
table tname(id int);
无需单独创建,直接插入数据
删除表
drop
table tname;
db.tname.drop()
删除库
drop
database dbname;
首先进去该库,db.dropDatabase()
插入记录
insert
into tname(id) value(2);
db.tname.insert({id:2})
删除记录
delete
from tname where id=2;
db.tname.remove({id:2})
修改/更新记录
update
tname set id=3
where id=2;
db.tname.update({id:2},
{$set:{id:3}},false,true)
查询所有记录
select
* from tname;
db.tname.find()
查询所有列
select
id from tname;
db.tname.find({},{id:1})
条件查询
select
* from tname where id=2;
db.tname.find({id:2})
条件查询
select
* from tname where id < 2;
db.tname.find({id:{$lt:2}})
条件查询
select
* from tname where id >=2;
db.tname.find({id:{$gte:2}})
条件查询
select
* from tname where id=2
and name='steve';
db.tname.find({id:2,
name:'steve'})
条件查询
select
* from tname where id=2
or name='steve';
db.tname.find($or:[{id:2},
{name:'steve'}])
条件查询
select
* from tname limit 1;
db.tname.findOne()
模糊查询
select
* from tname where name
like "%ste%";
db.tname.find({name:/ste/})
模糊查询
select
* from tname where name
like "ste%";
db.tname.find({name:/^ste/})
获取表记录数
select
count(id) from tname;
db.tname.count()
获取有条件
的记录数
select
count(id) from tname
where id=2;
db.tname.find({id:2}).count()
查询时去掉
重复值
select
distinct(last_name)
from tname;
db.tname.distinct('last_name')
正排序查询
select
*from tname order by id;
db.tname.find().sort({id:1})
逆排序查询
select
*from tname
order by id desc;
db.tname.find().sort({id:-1})
取存储路径
explain
select * from tname
where id=3;
db.tname.find({id=3}).explain()
特别要注意的是:mongodb插入多个字段语法
> db.user.insert({id:1,name:'steve',sex:'male'}) 正确
> db.user.insert({id:2},{name:'bear'},{sex:'female'}) 错误
Mysql基础操作!
数据库操作新建数据:create database 库名 charset=utf8;修改数据库字符集:alter database 库名 charset=utf8;删除数据库;drop database 库名;查询当前使用的数据库;select database();查询创建数据库sql语句:select create database 库名;
数据表操作新建数据表:create table 表名 [chaeset= ] 字段; #新建数据表必须有数据字段修改表名;alter table 表名 rename to 新表名;删除数据表:drop table 表名;delete from 表名;查询数据表:show tables;查询创建数据表sql语句:show create table 表名;
数据表字段操作给表添加字段:alter table 表名 add 字段 字段类型;指定字段插入的位置: alter table 表名 add 字段名 字段类型 after 某字段; 修改字段名:alter table 表名 change 字段名 新名 新字段类型;修改字段字段类型:alter table 表名 modify 字段名 新字段类型;删除字段:alter table 表名 drop 字段名;显示所有字段:desc 表名;
删除操作:物理删除一条记录:delete from 表名;delete from 表名 [where 条件];逻辑删除一条记录;isDelete相当于增加一行标记字段alter table 表名 add isDelete bit default "0";update 表名 set isDelete = 值 where 条件;
数据操作添加数据记录:全字段添加insert into 表名 values();指定字段添加insert into 表名 (字段名,) values (值,);指定字段插入,非空字段必须填写更新数据表中数据updata 表名 set 字段 = 更新值 where 记录条件查询全部数据记录:select * from 表名;查询指定字段数据select 字段名 from 表名;按条件查询指定字段数据select 字段名 from 表名 where 条件;查询字段起别名as (可以省略)select 字段名 as 别名 [ 字段名 别名] from 表名;模糊查询like,%表示多个字符,_表示一个字符 select 字段名 from 表名 where 条件 [ like ‘%8_8’]
字段类型:约束(主键Primary key、外键foreigh key 、唯一性Unique、空 null 、非空Not Null) 自动增张 auto_increment 删除多个表中有关联的数据----设置foreign key 为set null
条件查询数据;select [* 字段名] from 表名 where [条件语句] 条件后接下面逻辑运算符或组合判断:小于:< 大于:>小于等于:<=大于等于:>=不等于:!= <>且:and 或:or 存在集合里:in ()不在集合里:not in ()是:is 不是:not is两者之间:between...and...
查询数据排序order by;select [* 字段] from 表名 order by 字段 asc(升序) desc(降序)
查询数据分组group by;select [* 字段] from 表名 group by 字段;通过group_concat() 可以输出分组
数据查询分页 limit 起始位置,count数量select * from 表名 limit 起始位置,显示计数;
第n页 ; imit (n-1)*显示计数, 计数
聚合函数:求最大值 max()求最小值 min()求和 sum()求均值 avg()计数 count()保留小数 round(值,小数位),可以嵌套其余聚合函数使用
未完待续....
操作数据库表
/*
DML:数据库操作语言
主要对表中的数据库进行 增删改
****增:插入一条记录
insert into 表名 (列名1,列名2..) values (值1,值2..)
注意: 1.列名可以在表中选择一列或者几列
2.后面的值 必须和前面的列 一一对应
3.在SQL中除了int类型的数据,其他数据必须用''或者""引起来
我们推荐用单引号
4.如果要插入的数据所有字段都有,那么以上的
(列名1,列名2..) 可以省略
****删:删除一条记录
格式: delete from 表名;//删除表中的所有记录
delete from 表名 where条件;
****改:修改表中的记录信息
update 表名 set 字段名 = 值;//把所有记录的该列都改了
update 表名 set 字段名 = 值 where条件;
*/
#向students 表中插入一个学生信息(id:001 name:李四 )
INSERT INTO students (sid,NAME) VALUES ('001','李四');
#向students 表中插入一个学生信息(id:002 name:王五 age:18 )
INSERT INTO students (sid,NAME,sage) VALUES ('002','王五',18);
INSERT INTO students VALUES ('003','赵六',28);
#删除students表中的记录
DELETE FROM students;
#删除某一条记录
DELETE FROM students WHERE sid=3;# 这里条件sid=3不能写成 sid==3,sid.equals(3);
#修改students表,把sage这一列的值 改为20
UPDATE students SET sage=20;
#修改students表,把王五的sage这一列的值 改为 50
UPDATE students SET sage = 50 WHERE NAME='王五';# sid = 2
/*
DQL:查询数据库中的数据
基本格式:
select [distinct] *|列名1,列名2 from 表名;# 查询表中的所有列数据
带有条件的查询 用关键字 where
*/
#基本查询
SELECT * FROM product;
SELECT pname,price FROM product;
SELECT price FROM product;
SELECT DISTINCT price FROM product;
#基本查询练习
# 1.查询所有的商品.
SELECT * FROM product;
# 2.查询商品名和商品价格.
SELECT pname,price FROM product;
# 3.去掉价格重复值.
SELECT DISTINCT price FROM product;
# 4.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
SELECT price+10 FROM product;
# 5.别名查询.使用的关键字是as(as可以省略的).
SELECT price+10 AS 打折价格 FROM product;
SELECT price+10 打折价格 FROM product;
#条件查询练习
#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname='花花公子';
#查询价格为800商品
SELECT * FROM product WHERE price=800;
#查询价格不是800的所有商品
SELECT * FROM product WHERE price <> 800;
SELECT * FROM product WHERE price > 800 OR price < 800;
SELECT * FROM product WHERE NOT (price=800);
#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price > 60;
SELECT * FROM product WHERE NOT (price <= 60);
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price IN (200,800);
SELECT * FROM product WHERE price = 200 OR price = 800;
#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';
#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';
#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';
#查询没有分类的商品
SELECT * FROM product WHERE category_id IS NULL;
#SELECT * FROM product where category_id = null;# 错误的 判断空 不能用"="
#查询有分类的商品
SELECT * FROM product WHERE category_id IS NOT NULL;
#SELECT * FROM product WHERE category_id <> NULL;# 错误的 判断不为空 不用"<>"
#查询所有价格大于2000的电脑商品(catetory_id是c001)
#或者价格大于2000的服装商品(catetory_id是c002)**
SELECT * FROM product WHERE (price > 2000 AND category_id = 'c001')
OR (price > 2000 AND category_id = 'c002');
SELECT * FROM product WHERE price > 2000 AND category_id IN ('c001','c002');
/*
SQL语言的分类:
DDL:数据库定义语言
他主要是对数据库,数据库表进行创建删除维护等
关键字:create(创建),alter(修改),drop(删除), show(查)
DCL:数据库操纵/控制语言
控制数据库访问权限
DML:数据库操作语言
它主要是对表中的数据进行 增删改
关键字:insert(增加),delete(删除),update(修改)等
DQL:数据库查询语言
它主要是对表中的数据进行 查询
关键字:select(查询) from(从) where(条件)
*/
#注释
-- 注释
SELECT * FROM users;
/*
DDL:数据库定义语言
主要是操作数据库,操作数据库表
DDL之操作数据库:
对数据库进行增删改查
****增:创建一个数据库
create database 数据库名;//默认编号,安装的时候您选择的那个编号
create database 数据库名 charset 编码;
删:删除一个数据库
drop database 数据库名;
修:修改数据库名字很麻烦
修改正在使用的数据库
use 数据库名;
查:
查询正在使用的数据库:
select database();
查询所有的数据库
show databases;
*/
#增:创建一个数据库
CREATE DATABASE db297;
CREATE DATABASE db2971 CHARSET utf8;
#删:删除一个数据库
DROP DATABASE db2971;
#修改正在使用的数据库
USE jjj;
#查询正在使用的数据库
SELECT DATABASE();
#查询所有数据库
SHOW DATABASES;
#查询某一个数据的详细信息
SHOW CREATE DATABASE db297;
/*
DDL之数据库表
对数据库表进行增删改查
****增:创建一个表
create table 表名(
字段名1 数据类型1(长度) [约束],
字段名2 数据类型2(长度) [约束]
);
删:删除表
drop table 表名;
查:查看表
desc 表名; 查看一个表的详细信息
show tables;查看所有的表
改:改名字
rename table 表名 to 新表名;
*/
#创建一个表,学生表(编号,姓名,年龄)
CREATE TABLE student(
sid INT PRIMARY KEY, -- 主键约束
sname VARCHAR(30),
sage INT
);
#删除 student表
DROP TABLE student;
#查看一个表的详细信息
DESC student;
#查看所有的表
SHOW TABLES;
#修改表的名字
RENAME TABLE student TO students;
/*
DDL之修改表中的列
增删改查
增:增加一个列
alter table 表名 add 列名 类型(长度) [约束]
删:删除一个列
alter table 表名 drop 列名;
查:查看表的数据结构
desc 表名;
改:修改列
可以修改的名字,类型,约束等..
修改列名:
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改列的类型和约束
alter table 表名 modify 列名 类型(长度) 约束;
修改表的字符集
alter table 表名 character set 字符集;(一般不修改)
*/
#要给students表 添加一列 "电话"
ALTER TABLE students ADD phone VARCHAR(30);
#要把students表中 "电话"这一列删除
ALTER TABLE students DROP phone;
#查看students表有多少列 分别是什么
DESC students;
#修改列名
ALTER TABLE students CHANGE sname NAME VARCHAR(30);
#修改列的类型和约束
ALTER TABLE students MODIFY NAME VARCHAR(50);
/*
三个知识点:
1.介绍两个约束
主键约束: primary key 被主键约束的列必须有唯一,而且不能为空
自动增长约束:auto_increment 被自动增长约束的列,值可以不用管
2.删除表所有数据的两种方式(面试题)
delete from 表名;# 删除表的所有数据,但是自动增长值不会重置为1
truncate table 表名;# 删除表的所有数据,并且重置自动增长值为1
truncate的底层,是先摧毁表,然后再重建表
3.乱码问题
在DOS创建 查询uft8编码的数据库数据时,会出现乱码
解决方案:
临时方案:
set names gbk;//临时地把告诉数据库 我们用gbk来查询
永久方案:修改 my.ini的配置文件(不建议)
*/
#创建一张表,用户(编号,用户名,密码)
CREATE TABLE users(
uid INT PRIMARY KEY AUTO_INCREMENT,# 自动增长默认是从1开始
uname VARCHAR(30),
upass VARCHAR(30)
);
#插入数据
INSERT INTO users (uname,upass) VALUES ('王老','123321');
INSERT INTO users (uname,upass) VALUES ('李四','123');
#删除表中的所有数据
DELETE FROM users;
INSERT INTO users (uname,upass) VALUES ('王五','1234');
#使用truncate删除表中的所有数据
TRUNCATE TABLE users;
INSERT INTO users (uname,upass) VALUES ('赵六','12345');
/*
1.DDL:操作数据库中对象,数据库,表,列
***创建数据库
create database 数据库名;# 以默认的编码创建数据库
create database 数据库名 charset 编码名;
create database 数据库名 character set 编码名;
***创建表
create table 表名(
字段1 数据类型(长度) [约束],
字段2 数据类型(长度) [约束]
);
约束:
主键约束:primary key,该列的值必须唯一,并且不为空
自动增长列约束:auto_increment 该列值交给数据库维护
2.DML:操作数据库表中数据,对数据进行增删改
****添加一条记录
insert into 表名 (列名1.列名2..) values (值1,值2..);
注意:
1.列名和后面的值 必须一一对应
2.(列名1.列名2..) 这里的列名可以写一个或者多个
3.如果是全列名,可以省略不写
4.如果值是数字类型的可以不加'',否则必须加上'' 或者 ""
****删除一条记录
delete from 表名;# 删除表中所有数据,不会重置自动增长值
truncate table 表名;#删除表所有数据,先把表摧毁再重建
delete from 表名 where 条件;# 这里条件和查询共用
****修改一条记录
update 表名 set 字段名=值,字段名=值;#表中所有记录的字段都修改了
update 表名 set 字段名=值,字段名=值 where 条件;# 这里条件和查询共用
3.DQL:操作数据库表中数据,对数据进行查询
***基本查询:
格式:
select distinct *|字段1,字段2 from 表名;
***条件查询
比较条件
>,<,>=,<=,<>,=
between xx and xx (含头行尾)
in (值1,值2)
like '_a%' 模糊查询
is null ,is not null 判断空或者不空
逻辑条件
与 and
或 or
非 not
*/
MySQL基础教程(命令行操作方式)
连接和断开数据库服务器
连接数据库服务:shell> mysql -h host -u user -p
断开数据库服务:mysql> QUIT
输入查询(验证数据库安装正确)
查询数据库版本:SELECT VERSION();
查询数据库创建时间:SELECT CURRENT_DATE;
进行简单数学计算:SELECT (4+1)*5;
创建和使用数据库
创建数据库:mysql> CREATE DATABASE menagerie;
选择menagerie数据库:mysql> USE menagerie
列表数据库中数据表:mysql> SHOW TABLES;
创建数据表:mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
查看数据表详细结构:mysql> DESCRIBE pet;
插入数据:INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
查询数据:
查询所有数据:SELECT * FROM pet;
清空数据:DELETE FROM pet;
修改/更新数据:UPDATE pet SET birth = '1989-08-31' WHWER name = 'name';
查询特定行列值相等:SELECT * FROM pet WHERE name = 'Bowser';
查询列值在某个范围:SELECT * FROM pet WHERE birth >= '1998-1-1';
逻辑与查询and:SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
逻辑或查询or:SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
将查询结果去重:SELECT DISTINCT owner FROM pet;
根据条件升序表数据排序:SELECT name,birth FROM pet WHERE name='' ORDER BY birth;
根据条件降序表数据排序:SELECT name,birth FROM pet WHERE name='' ORDER BY birth DESC;
多条件表数据排序:SELECT name,species,birth FROM pet ORDER BY species,birth DESC;
日期计算使用特定函数:SELECT name, birth, CURDATE(), TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet;
将计算后结果排序:SELECT name, birth, CURDATE(),TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet ORDER BY name;
取得日期中的月份( YEAR(), MONTH(), DAYOFMONTH(). MONTH()):SELECT name, birth, CURDATE(),TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet ORDER BY age;
取得日期中月份是特定的值:SELECT name, birth, death,TIMESTAMPDIFF(YEAR,birth,death) AS age FROM pet WHERE death IS NOT NULL ORDER BY age;
查看常用的日期时间函数:SELECT name, birth, MONTH(birth) FROM pet;
使用NULL值(数据库的查询中一定不要使用NULL,因为NULL会引起全表扫描。导致性能下降很多。):SELECT 1 IS NULL, 1 IS NOT NULL;SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
模式匹配(模糊查询)---》高级匹配方式:正则表达式:查找以b开头的名称:SELECT * FROM pet WHERE name LIKE 'b%';
模式匹配(模糊查询)---》高级匹配方式:正则表达式:查找以结尾的名称fy:SELECT * FROM pet WHERE name LIKE '%fy';
模式匹配(模糊查询)---》高级匹配方式:正则表达式:查找包含名称wSELECT * FROM pet WHERE name LIKE '%w%';
模式匹配(模糊查询)---》高级匹配方式:正则表达式:查找包含五个字符的名称,请使用_模式字符的五个实例:SELECT * FROM pet WHERE name LIKE '_____';
计数总记录数:SELECT COUNT(*) FROM pet;
条件查询记录数:SELECT COUNT(*) FROM pet WHERE name=?;
分组计数记录数计数:SELECT species, COUNT(*) FROM pet GROUP BY species;
多条件分组记录计数:SELECT species, sex, COUNT(*) FROM pet WHERE species = 'dog' OR species = 'cat' GROUP BY species, sex;
多表查询-子查询:
多表查询-联合查询:1.SELECT pet.name, TIMESTAMPDIFF(YEAR,birth,date) AS age, remarkFROM pet INNER JOIN event ON pet.name = event.name WHERE event.type = 'litter'; 2.SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species FROM pet AS p1 INNER JOIN pet AS p2ON p1.species = p2.species AND p1.sex = 'f' AND p1.death IS NULL AND p2.sex = 'm' AND p2.death IS NULL;
获取数据库和表的信息
查找当前使用的数据库:SELECT DATABASE();
列表数据库中的数据表:SHOW TABLES;
查找数据表的结构:DESCRIBE pet;(简写:DESC pet)
常见查询示例
查询表中某列最大值:SELECT MAX(article) AS article FROM shop;
查询表中某列最大值,并取得当前行所有数据:子查询方式-SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);联合查询方式-SELECT s1.article,s1.dealer,s1.price FROM shop s1 LEFT JOIN shop s2 ON s1.price <s2.price WHERE s2.article IS NULL;
查询分组后,每组数据的最大值: SELECT article,MAX(price)AS price FROM shop GROUP BY article ORDER BY article;
使用用户定义的变量:SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
使用AUTO_INCREMENT(自动增长列):CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id));
Android SQLite (四 ) 全面详解(二)
SQLite创建数据库
创建数据库语法:
sqlite3 DatabaseName.db
如下展示一个实例:
SQLite附加数据库
假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite的ATTACH DTABASE语句是用来选择一个特定的数据库,使用该命令后,所有的SQLite语句将在附加的数据库下执行。 ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为”:memory:”,我们可以将其视为内存数据库,内存数据库无法持久化到磁 盘文件上。如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name。最后需要说明的是,如果一个事务包 含多个Attached数据库操作,那么该事务仍然是原子的。
附加数据库语法(Alias-Name的取值不能为main或者temp,系统的):
ATTACH DATABASE 'DatabaseName' As 'Alias-Name';
如下展示一个实例:
SQLite分离数据库
SQLite的DETACH DTABASE语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用ATTACH语句附加的。如果同一个数据库文件已经被附加上多个别 名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离main或temp数据库。如果数据库是在内存中或者是临时数据库,则该数据库将被摧毁,且内 容将会丢失。
分离数据库语法:
DETACH DATABASE 'Alias-Name';
如下展示一个实例:
SQLite创建表
SQLite的CREATE TABLE语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
创建表语法:
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
如下展示一个实例:
SQLite删除表
SQLite的DROP TABLE语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永远丢失。
删除表语法:
DROP TABLE database_name.table_name;
如下展示一个实例:
SQLite Insert语句
SQLite的INSERT INTO语句用于向数据库的某个表中添加新的数据行。
Insert语句语法:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
如果要为表中的所有列添加值,您也可以不需要在SQLite查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
也可以通过在一个有一组字段的表上使用select语句填充数据到另一个表中(使用一个表来填充另一个表)。下面是语法:
INSERT INTO first_table_name [(column1, column2, ...columnN)] SELECT column1, column2, ...columnN FROM second_table_name [WHERE condition];
如下展示一个实例:
SQLite Select语句
SQLite的SELECT语句用于从SQLite数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
Select语句语法:
SELECT column1, column2, columnN FROM table_name;
如果您想获取所有可用的字段,那么可以使用下面的语法:
SELECT * FROM table_name;
如下展示一个实例:
SQLite算术运算符
运算符
描述
+
把运算符两边的值相加
-
左操作数减去右操作数
*
把运算符两边的值相乘
/
左操作数除以右操作数
%
左操作数除以右操作数后得到的余数
这个太小儿科就不演示例子了。
SQLite比较运算符
运算符
描述
==
检查两个操作数的值是否相等,如果相等则条件为真。
=
检查两个操作数的值是否相等,如果相等则条件为真。
!=
检查两个操作数的值是否相等,如果不相等则条件为真。
<>
检查两个操作数的值是否相等,如果不相等则条件为真。
>
检查左操作数的值是否大于右操作数的值,如果是则条件为真。
<
检查左操作数的值是否小于右操作数的值,如果是则条件为真。
>=
检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。
<=
检查左操作数的值是否小于等于右操作数的值,如果是则条件为真。
!<
检查左操作数的值是否不小于右操作数的值,如果是则条件为真。
!>
检查左操作数的值是否不大于右操作数的值,如果是则条件为真。
这个太小儿科就不演示例子了,结合where语句使用就行。
SQLite逻辑运算符
运算符
描述
AND
AND运算符允许在一个SQL语句的WHERE子句中的多个条件的存在。
BETWEEN
BETWEEN运算符用于在给定最小值和最大值范围内的一系列值中搜索值。
EXISTS
EXISTS运算符用于在满足一定条件的指定表中搜索行的存在。
IN
IN运算符用于把某个值与一系列指定列表的值进行比较。
NOT IN
IN运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。
LIKE
LIKE运算符用于把某个值与使用通配符运算符的相似值进行比较。
GLOB
GLOB运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB与LIKE不同之处在于,它是大小写敏感的。
NOT
NOT运算符是所用的逻辑运算符的对立面。比如NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。
OR
OR运算符用于结合一个SQL语句的WHERE子句中的多个条件。
IS NULL
NULL运算符用于把某个值与NULL值进行比较。
IS
IS运算符与=相似。
IS NOT
IS NOT运算符与!=相似。
\\(两竖线)
连接两个不同的字符串,得到一个新的字符串。
UNIQUE
UNIQUE运算符搜索指定表中的每一行,确保唯一性(无重复)。
如下展示一个实例:
SQLite位运算符
下表中列出了SQLite语言支持的位运算符。
运算符
描述
&
二进制AND运算符。
/(一个竖线)
二进制OR运算符。
~
二进制补码运算符是一元运算符,具有”翻转”位效应。
<<
左操作数的值向左移动右操作数指定的位数。
>>
右操作数的值向右移动右操作数指定的位数。
例子就不演示了。
SQLite布尔表达式
SQLite的布尔表达式在匹配单个值的基础上获取数据。
如下演示了SQLite布尔表达式的用法:
SQLite数值表达式
数值表达式用来执行查询中的任何数学运算。
语法:
SELECT numerical_expression as OPERATION_NAME [FROM table_name WHERE CONDITION] ;
如下示例:
SQLite日期表达式
日期表达式返回当前系统日期和时间值,这些表达式将被用于各种数据操作。
语法:
SELECT CURRENT_TIMESTAMP;
返回结果:
CURRENT_TIMESTAMP = 2013-03-17 10:43:35
SQLite Where子句
SQLite的WHERE子句用于指定从一个表或多个表中获取数据的条件。如果满足给定的条件,即为真(true)时,则从表中返回特定的值。您可 以使用WHERE子句来过滤记录,只获取需要的记录。WHERE子句不仅可用在SELECT语句中,它也可用在UPDATE、DELETE语句中。
语法:
SELECT column1, column2, columnN FROM table_name WHERE [condition]
例子就不BB了,上面有很多关于where子句的例子。
SQLite AND和OR运算符
SQLite的AND和OR运算符用于编译多个条件来缩小在SQLite语句中所选的数据。这两个运算符被称为连接运算符。这些运算符为同一个SQLite语句中不同的运算符之间的多个比较提供了可能。
语法:
SELECT column1, column2, columnN FROM table_name WHERE [condition1] AND [condition2]...AND [conditionN];
SELECT column1, column2, columnN FROM table_name WHERE [condition1] OR [condition2]...OR [conditionN];
例子就不BB了,上面有很多关于AND和OR的例子。
SQLite Update语句
SQLite的UPDATE查询用于修改表中已有的记录。可以使用带有WHERE子句的UPDATE查询来更新选定行,否则所有的行都会被更新。
语法:
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
如下展示了一个实例:
SQLite Delete语句
SQLite的DELETE查询用于删除表中已有的记录。可以使用带有WHERE子句的DELETE查询来删除选定行,否则所有的记录都会被删除。
语法:
DELETE FROM table_name WHERE [condition];
例子就算了,比较easy。清除所有数据可以直接:DELETE FROM table_name;
SQLite Like子句
SQLite的LIKE运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE运算符将返回真(true),也就是 1。这里有两个通配符与LIKE运算符一起使用:
百分号 (%)
下划线 (_)
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
语法:
SELECT FROM table_name WHERE column LIKE 'XXXX%';
SELECT FROM table_name WHERE column LIKE 'XXXX_';
例子就算了,上面也有使用like的例子,比较easy。XXXX%和XXXX_都可以任意组合使用。
SQLite Glob子句
SQLite的GLOB运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB运算符将返回真(true),也就是 1。与LIKE运算符不同的是,GLOB是大小写敏感的,对于下面的通配符,它遵循UNIX的语法。
星号 (*)
问号 (?)
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。
语法:
SELECT FROM table_name WHERE column GLOB 'XXXX*';
SELECT FROM table_name WHERE column GLOB 'XXXX?';
例子就算了,上面也有使用glob的例子,比较easy。XXXX*和XXXX?都可以任意组合使用。
SQLite Limit子句
SQLite的LIMIT子句用于限制由SELECT语句返回的数据数量。
带有LIMIT子句的SELECT语句基本语法:
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows]
LIMIT子句与OFFSET子句一起使用时的语法:
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows] OFFSET [row num]
如下就是一个实例:
SQLite Order By关键字
SQLite的ORDER BY子句是用来基于一个或多个列按升序或降序顺序排列数据。
语法:
SELECT column-list FROM table_name [WHERE condition][ORDER BY column1, column2, .. columnN] [ASC | DESC];
您可以在ORDER BY子句中使用多个列。确保您使用的排序列在列清单中。ASC为升序,DESC为降序。
如下就是一个实例:
SQLite Group By关键字
SQLite的GROUP BY子句用于与SELECT语句一起使用,来对相同的数据进行分组。在SELECT语句中,GROUP BY子句放在WHERE子句之后,放在ORDER BY子句之前。
语法:
SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN;
GROUP BY子句必须放在WHERE子句中的条件之后,必须放在ORDER BY子句之前。
如下就是一个实例:
SQLite Having子句
HAVING子句允许指定条件来过滤将出现在最终结果中的分组结果。WHERE子句在所选列上设置条件,而HAVING子句则在由GROUP BY子句创建的分组上设置条件。
下面是HAVING子句在SELECT查询中的位置:
SELECT FROM WHERE GROUP BY HAVING ORDER BY
在一个查询中,HAVING子句必须放在GROUP BY子句之后,必须放在ORDER BY子句之前。下面是包含HAVING子句的SELECT语句的语法:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2;
如下就是一个实例:
SQLite Distinct关键字
SQLite的DISTINCT关键字与SELECT语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。有可能出现一种情况,在一个表中 有多个重复的记录。当提取这样的记录时,DISTINCT关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。
语法:
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition];
如下就是一个实例:
总结
至此,基本的Sqlite使用已经算是可以了。关于Sqlite更多知识点再下一篇会有详细说明
本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/5237941.html,如需转载请自行联系原作者
phalapi-进阶篇6(解决大量数据存储数据库分表分库拓展)
phalapi-进阶篇6(解决大量数据存储数据库分表分库拓展)
前言
时隔半个月随着PHP7的推出为PHP打了一瓶兴奋剂,在性能提升了一倍的情况下我们会逐渐发现,瓶颈会集中在数据库操作,那我们的内容就接着数据库读写分离,来聊聊分表分库应该怎么玩,应为PhalApi的分表分库并不是非常方便,笔者在这里提供了一个分表分库数据库集群的拓展,详细文档请见博客基于PhalApi的DB集群拓展 V0.1bate 大家可以自行在开源中国扩展Git地址中找到Cluster进行下载使用.
先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.
附上:
官网地址:http://www.phalapi.net/
开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release
开源中国扩展Git地址:http://git.oschina.net/dogstar/PhalApi-Library
1. 场景
在实际工作中,我信奉一句话一切抛开业务的架构设计都是耍流氓所以我们从场景进行开篇
1.1 单条数据多查多写多改
这里做的例子,大家都在玩游戏把,玩游戏里面是不是有角色,角色是不是有装备,经验,物品以及等等,而且他会有一个特别的要求就是实时(因为我角色打了一个怪物获得了100xp我们不可能告诉他你等6个小时缓存时间结束了再来看,必须是实时的),当然我们可以使用缓存来解决这个问题我们下节会说道这个问题
那么在这种场景下,一个用户对于角色的操作非常频繁而且唯一我们就很好采用分表分库的操作了,相对于单表操作他会把所有的操作分散到各各数据库去操作,这样对于单个数据库总执行sql语句量就会有个指数级的下降,以及数据量也会均衡分配到每个数据库,但是当我们进行这类单条数据操作的时候根本不会对性能有任何的影响,因为只是通过算法得出了这条记录存在于那个库那张表而已,
1.2 日志记录分析
就已上面的例子我们继续讲,如果有一天你的领导过来提了个需求,我需要一个数据分析系统来统计用户每天什么时间段最活跃.用户平均没人充值了多少钱啊,多少等级下用户冲钱最多啊,如果遇到这种问题你们会怎么办?三分钟思考
我们先来看看我们会遇到什么样子的问题,数据量大积累当1000w+之后数据库执行sql基本没法看,大量的写入数据对数据库压力大
我们再来看看分表分库怎么解决这个问题,1000w+数据库的情况下 比如你是4表4库一共16张表,那每张表的数量就是1000w/16=62w也就是每张表只需要存储62w的数据就ok了,当写入数据的时候会根据ID的顺序均衡写入4库执行sql的压力也就分布到了4个数据库,唯一的问题就是在执行where条件的时候可能需要对前置表进行遍历,而前置表的数据量就是1000w,当然前置表里面只存放ID和where条件的字段
2. 实现思路
就笔者在工作中接触到了很多案例的分表分库使用了根据城市,或者是其他的特性进行分表分库规则,这样一定会出现用户分布不均匀导致的莫一个库表压力巨大,我这里使用了均等分分割
大家先看一组图就会明白了
当我们进行插入的时候的操作如下:
插入前置表获取主键,通过id得出应该存入几库几表在相应的地方写入数据
当我们进行单条读取操作的时候操作如下:
通过id获取应该在几库几表在相应的地方获取数据
当我们使用where查询的时候操作如下:
如果where条件在前置表存在从前置表通过where获取结果集ID,通过ID分组到库和表,然后进行查询在拼接结果集统一返回
3. 优缺点
优点:
很好的避开了数据库存放数据过多效率底下的瓶颈
在单条记录操作性能指数及提升
数据量大的情况下where条件查询性能提高基本
能对亿级的数据进行处理而且效率较高
不需要考虑分表分库规则数据均等分布
缺点
where查询字段必须预先添加到,前置表不然就必须遍历数据库数量 * 表数量才能得到想要的结果
where查询就算有前置表的情况下最坏的情况也需要遍历数据库数量 * 表数量才能得到想要的结果
对一些特定查询天生不足比如排序
4. 总结
在本小节的最好简单提及一下,基于PhalApi的DB集群拓展 V0.1bate功能展示比较局限童鞋们可以根据自己的业务需求来觉得是否使用,笔者也会在后期继续更新维护完善为一个比较方便的集群拓展.
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
MySQL学习笔记_8_SQL语言基础复习
SQL语言基础复习
一、概述
SQL语句注释方式
1)以“#”开头直到行尾的所有内容都是注释
2)以“--”(--后还有一个空格)开头直到行尾的所有内容都是注释
3)以“/*”开始,以“*/”结束的所有内容都是注释,可用于注释多行
二、数据库操作
1、创建数据库
create database db_name;
db_name命名规则:
1)名称可由任意字母,数字,”_”或”$”组成,可以是上述任意字符作为开头,但是不能单独使用数字作为数据库名称。
2)长度限制:数据库、表、列和索引的名称最多64个字符,别名最多可长达256个字符。
3)不能使用MySQL关键字作为数据库、表名。
2、删除数据库
drop database db_name; #drop
下降,终止
他将不可恢复的删除数据库及其所有数据表,建议在使用drop
database前,先对数据库进行备份
三、表的操作
1、创建数据表
create table <表名>
(<列名> <数据类型>
[<列级完整性约束条件>]
[,<列名> <数据类型>
[<列级完整性约束条件>]]...
[,表级完整性约束条件]
);
拓展:create temporary table...
#创建临时表,临时表在服务器交互结束时会自动删除
2、修改数据表
指:修改表的结构,使用alter talbe语句来修改表中列的属性,甚至修改表的名称
alter talbe <表名>
[add <新列名> <数据类型>
[完整性约束]]
[drop <完整性约束>]
[alter column <列名> <数据类型>];
#alter修改,更改
3、删除表
drop table table_name;
drop table if exists table_name;
四、记录的操作
1、插入数据
insert into <表名>
[(<属性列1>,<属性列2>...)]
values(<常量1>[,<常量2>...])
e.g. insert into student_info(stu_id,stu_name,str_sex,str_age)
values(234,”xiaofang”,”男”,18);
2、更新记录
update <表名>
set <列名>=<表达式>[,<列名>=<表达式>]...
[where<条件>];
说明:update语句包括set子句和where子句,set子句指定修改方式,要修改的列以及修改后的取值,where子句用于指定钥修改的数据记录,默认修改表中的所有记录。更新语句的关键就是要设定好用于进行判断的where条件!
e.g. update student_info set str_age=22 where stu_id = 9028;
3、删除记录
delete from <表名>[where
<条件>];
说明:如果用户在使用delete语句时不设定where条件,则表格中的所有记录将被清空!
delete from student_info where stu_id = 9028;
五、查询
select [all | distinct] <目标列表表达式>[,<目标列表表达式>]
…
from <表名或视图名>[,<表名或视图名>]...
[where <条件表达式>]
[group by <列名1>[having
<条件表达式>]]
[order by <列名2>[asc|desc]];
六、学生选课系统数据库设计流程示例
1、数据库设计流程:
系统分析--->逻辑设计--->物理实现
2、系统分析
3、逻辑设计
MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据。 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。 语法 以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] LIMIT N 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。 SELECT 命令可以读取一条或者多条记录。 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 你可以使用 WHERE 语句来包含任何条件。 你可以使用 LIMIT 属性来设定返回的记录数。 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。 通过命令提示符获取数据 以下实例我们将通过 SQL SELECT 命令来获取 MySQL 数据表 runoob_tbl 的数据
mySQL-简易用法(三)
11.R(Retrieve):查询查询所有数据库的名称:show databases;查询某个数据库的字符集:查询某个数据库的创建语句show create database 数据库名称;12.修U(Update):修改修改数据库的字符集alter database 数据库名称 character set 字符集名称;13.D(Delete):删除删除数据库drop database 数据库名称;判断数据库存在,存在再删除drop database if exists 数据库名称;14. 使用数据库查询当前正在使用的数据库名称select database();使用数据库use 数据库名称;15. 操作表C(Create):创建. 语法:create table 表名(列名1 数据类型1,列名2 数据类型2,....列名n 数据类型n);注意:最后一列,不需要加逗号(,)16.数据库数据类型:int:整数类型age int,double:小数类型score double(5,2)date:日期,只包含年月日,yyyy-MM-dddatetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:sstimestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值varchar:字符串name varchar(20):姓名最大20个字符zhangsan 8个字符 张三 2个字符17. 表操作1.创建表create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);2.复制表:create table 表名 like 被复制的表名;R(Retrieve):查询查询某个数据库中所有的表名称show tables;查询表结构desc 表名;3. U(Update):修改修改表名alter table 表名 rename to 新的表名;修改表的字符集alter table 表名 character set 字符集名称;添加一列alter table 表名 add 列名 数据类型;修改列名称 类型alter table 表名 change 列名 新列别 新数据类型;alter table 表名 modify 列名 新数据类型;4. 删除列alter table 表名 drop 列名;5. D(Delete):删除表drop table 表名;drop table if exists 表名 ;18 增删改查表中数据1.增加 数据insert into 表名(字段名1,字段名2...) values(值1,值2)INSERT into students(name,age) VALUES("张三丰",108)注意:列名和值要一一对应。如果表名后,不定义列名,则默认给所有列添加值insert into 表名 values(值1,值2,...值n);除了数字类型,其他类型需要使用引号(单双都可以)引起来刷新查看2.删除数据DELETE FROM 表名 WHERE 条件DELETE from students where id=1
DELETE from students where age=20 and name="张三"
DELETE from students where id=02 or id=03注意:如果不加条件,则删除表中所有记录。如果要删除所有记录delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。3.修改数据UPDATE 表名 set 字段1=值1,字段2=值2 WHERE 条件UPDATE students set name="新名字" ,age=66 WHERE NAME='李四注意:如果不加任何条件,则会将表中所有记录全部修改。4.查找数据SELECT 字段1,字段2 FROM 表名 WHERESELECT * from students
SELECT id,name from students
//复杂的 查询
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定注意:1如果查询所有字段,则可以使用*来替代字段列表。去除重复:distinct计算列一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)ifnull(表达式1,表达式2):null参与的运算,计算结果都为null表达式1:哪个字段需要判断是否为null如果该字段为null后的替换值。起别名:as:as也可以省略条件查询where子句后跟条件运算符> 、< 、<= 、>= 、= 、<>BETWEEN...ANDIN( 集合)LIKE:模糊查询占位符:_:单个任意字符%:多个任意字符IS NULLand 或 &&or 或 ||not 或 !常用查询SQL距离- 查询年龄大于20岁
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;
-- 查询年龄等于20岁
SELECT * FROM student WHERE age = 20;
-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 && age <=30;
SELECT * FROM student WHERE age >= 20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为null
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查询姓尹的有哪些? like
SELECT * FROM student WHERE NAME LIKE '尹%';
-- 查询姓名第二个字是国的人
SELECT * FROM student WHERE NAME LIKE "_国%";
-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含胜的人
SELECT * FROM student WHERE NAME LIKE '%胜%';
Mysql数据库 增、删、改、查 的操作
1.数据库概述 (DataBase) 为什么要用数据库?甲骨文 龟壳 记录历史 竹简 记录 纸张计算机: 视频 文字 管理比较乱 数据越来越多访问特别慢数据是软黄金 大数据时代 人工智能 阿尔法 围棋 李在石 柯洁数据库管理系统 :有哪些数据库:1.关系型数据库(RDBMS 关系型数据库管理系统)1.Oracle(神喻-神)甲骨文 数据库JavaMysql (开源 免费 商业版 和社区版) 通用语言2.DB2数据库 商业 用的公司少3.sqlServer:微软2.非关系型数据库:一般存的JSON 开发人员1.redis 2.MongoDB进入数据库:mysql -uroot -proot -u用户名 -p密码Mysql数据库的服务端和客户端mysql.exe是mysql的客户端
mysqld.exe 是mysql的服务端 端口号3306
通过客户端可以操作服务端
my.ini my-default.ini 表示mysql的配置文件
数据库结构:
库 表 数据
sql:一种脚本语言,可以通过该语言操作数据库.
sql标准: 1999年国际标准化组织制定 SQL99
数据库大多数的sql在不同的数据库中都可以使用,但是每种数据库都有自己的方言.
sql语法:
1.sql语法可以单行或者多行写,必须以;结尾
2.可以通过缩进增加sql的可读性
3.sql不区分大小写,建议一般使用大写 执行的时候更高效.
注释:
单行注释:--空格, 例如: -- 数据库操作
多行注释:/* 内容 */ 例如 /* 数据库操作语言sql*/
sql分类:
对库和表的操作:DDL 数据定义语言对数据库 表 进行增删改查
对数据的增删改的操作: DML 数据操作语言 对数据进行增删改操作
对数据的查询操作:DQL 数据的查询语言 对数据进行查询的操作
数据控制语言:DCL 数据控制语言
.数据库操作(DDL):
show databases; 查看所有的数据库 默认有4个
create database stuty; 创建数据库
use 数据库名; 使用某个数据库
drop database 数据库名; 删除指定数据库.数据表的操作(DDL):
选定库:use 数据库
创建表
create table 表名称(
列名称 数据类型[约束条件],
列名称 数据类型[约束条件]
);
例子:创建一个学生表格,包含两列 学生姓名 类型字符串,学生年龄 类型int
create table stutent(
name varchar(10),
age int(3)
);
查看表: show tables;
删除表: drop table 表名称
修改: alter 关键字
mysql的DML语言的添加数据:
1.单条添加:
insert into 表名称(列1,列2...) values(值1,值2....)
单条插入的第二种方式:
insert into 表名称 values(值1,值2....)注意:所有的列的值都需要指定
2.多行插入
isnert into 表名称(列1,列2...) values(值1,值2....),(值1,值2....)..
修改数据:
1.单条修改
update 表名称 set 被修改的列名称=修改后的值 where 限定条件
2.多条修改
更改多条 不指定条件就是多条 或者 指定的条件多条都满足
update 表名称 set 被修改的列名称=修改后的值 where 限定条件