语法:create database 数据库名 character set 编码
# 注意:默认会存在四个数据库,其数据库中存储的是mysql数据库服务器的配置的数据
示例:create database firstDB character set utf8;
2.查看所有数据库-show
语法:show create database 数据库名;

语法:show databases;

修改编码:
语法:alter database 数据库名称 character set 编码;
例如:alter database mydb_01 character set gbk;
查看:show create database mydb_01;

语法:use 数据库名称;
例如:use mydb_01;
语法:select database();
例如:select database();
语法:drop dastabase 数据库名称;
例如:drop database mydb_01;

语法
create table 表名称(
字段名称 数据类型[约束],
字段名称 数据类型[约束],
...
);
示例:
create table user(
id int,
name varchar(15),
age int
);

数据库类型

常用的类型:
int:整数型
varchar:可变字符串
double:浮点型,例如(double(5,2),长度为5,其中必须包含两位小数)
date:日期(只有年月日)
timestamp:时间戳(年月日,时分秒都有)
java和mysql类型对比
mysql类型 java的类型
int java.lang.Integer
double java.lang.Double
char java.lang.String
varchar java.lang.String
text java.lang.String
blob java.lang.byte[]
date java.sql.Date
time java.sql.Time
timestamp java.sql.TimeStamp
约束
定义:
约束就是对字段的某种性质的一种约束
类型:
主键约束:primary key
外键约束:(下节课学)
非空约束:not null
唯一性约束:unique
默认值约束:default 默认值(指的是没有插入此字段时有默认值,当插入此字段时,即使值是null他也不会有默认值,即值为null)
主键约束:
主键是每一条记录的唯一性标识,一般没有实际意义,特点:非空 唯一
语法:字段名称 字段类型 primary key
注意:如果主键是int型 我们可以将其定义成 auto_increment(自增长)
示例:id int primary key auto_increment
例如:
create table user(
id int primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null,
gender varchar(20),
age int default 25,
email varchar(50) not null unique,
salary double(8,2),
state int default 0,
role varchar(10) default 'VIP',
registTime timestamp
);
2.1.查看当前数据库中的所有表
语法:show tables;

2.2.查看指定表的创建语句
语法:show create table 表名称;

2.3.查看表结构
语法:desc 表名称;

语法:drop table 表名称;
4.1.修改表名称
语法:rename table 旧名称 to 新名称;
例如:rename table user to newuser;

4.2.修改表的编码
语法:alter table 表名称 character set 编码;
例如:
alter table newuser character set gbk;
ALTER TABLE hq_message CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
语法:alter table 表名称 add 字段名称 数据类型 [约束];
例如:alter table newuser add idcart varchar(18) unique;

语法:alter table 表名称 drop 字段名;
例如:alter table newuser drop idcart;

语法:alter table 表名称 change 旧名称 新名称 数据类型
例如:alter table newuser change gender sex varchar(2);

语法:alter table 表名称 modify 字段名称 新的数据类型;
例如:alter table newuser modify sex int;

注意
select @@tx_isolation;--查看mysql的事物隔离级别
show variables like 'character%';--查看mysql数据库的当前编码
set character_set_client = gbk;--设置客户端编码
set character_set_results = gbk;--设置结果集的编码
语法:insert into 表名(字段名1,字段名2,...字段名n) valuse(值1,值2,...值n);
注意:
(1):如果主键是auto_increment的,那么,主键列的值可以写成null或者主键字段和主键值省略不写
(2):如果插入的数据是全数据的话,那么字段名称可以省略
例如:
insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime) values(1,'zhangsan','123',1,25,'zs@itcast.cn',100,0,'teacher','2015-10-10 12:35:50');

语句:update 表名称 set 字段名称1=值1,字段名称2=值2,....字段名称n=值n[where条件语句];
注意:如果不写where条件子句的话 会把表中的所有相应字段的数据全部修改
例如:update newuser set password=111 where id=1;

语法:delete from 表名 where条件句;
注意:如果不写where条件句的话 那么会把表中的数据全部删掉
delete from newuser和drop table user的区别?
前者是删除数据,但是表的结构还在
后者是把整个表全部删掉
truncate table newuser;和delete from newuser;区别?
前者一次性将表摧毁,然后在新建表结构
后者是一条一条的将数据删除
语法:select * from 表名;

语法:select 字段名称1,字段名称2... from 表名称;

语法:select distinct 字段名称 from 表名;

注意:聚合函数尽量不要和其他字段混合使用
4.41.计数函数
名称:count():统计当前表中有多少条数据
用法:select count(* 或 者字段名) from 表名;
注意:当使用字段进行统计时,如果该列中有null值,则不算一条记录

4.4.2.求和函数
名称:sum()
用法:select sum(salary) from 表名;
注意:如果要求和的字段中有null则把null当作0进行求和

4.4.3.最大值函数
名称:max()
用法:select max(salary) from user;
注意:null不作为数值比较

4.4.4.最小值函数
名称:min()
用法:select min(salary) from user;
注意:null不作为数值比较

4.4.5.平均值
名称:avg()
用法:select avg(salary) from user;
注意:如果字段中有null值,在相加时当作了0或者根本就没有算数,在相除的时候没有算此条记录

语法:select username,salary+1000 from user;
注意:可进行数学运算
null在进行运算的时候还是null

ifnull函数
作用:判断是否为null
语法:select username,ifnull(salary,0)+1000 from user;

as函数
作用:给字段起别名
语法:字段名 as 别名
注意:as可以省略不写

语法:order by 字段名;
注意:
默认升序(asc):order by 字段名 asc;
降序(desc):order by 字段名 desc;
例如:select * from user order by salary;

4.7.1.单一条件查询
语法:select * from 表名 where 字段名称='字段值';
注意:可以使用的运算符:> < >= <= !=
例如:select * from user where username='zhangsan';

4.7.2.多条件查询
语法:select * from 表名 where 字段名1='字段值' and 字段名2='字段值'......;
注意:逻辑连接关键字可以使用and、or、not;优先级:and > or
例如:
select * from user where role='技术部' and sex='女';
select * from user where role='teacher' or role='财务部';

4.7.3.范围查询
语法:select * from 表名 where 要查询的字段 between ... and ...
注意:即包左又包右

4.7.4.枚举查询
语法:in(枚举字段);---满足枚举字段的就会被查出来

语法:not in(枚举字段);排除满足枚举字段的所有字段

4.7.5.模糊查询
语法:like '数据';
用法:
select * from user where username like '张';---全名叫张的
select * from user where username like '张%';---姓张的
select * from user where username like '%张';---最后一个字是张的
select * from user where username like '%张%';---包含张的
select * from user where username like '_张%';---第二个字是张的
注意:%:代表多个任意字符 _代表任意一个字符
4.7.6.空/非空查询
语法:
is null;---某字段为null
is not null;---某字段不为null

语法:select 字段 from 表名 group by 字段 [having(条件)] 表达式;

limit 3,5
书写顺序:select 字段 from 表名 where 条件 group by 字段 having 条件 order by 字段;
执行顺序:from > where > group by > having > select > order by


创建customer表
id 整型 主键 自动增长,
姓名 字符串20 不能为空,
电话 字符串20 不能为空,
等级 字符串20 默认为铜牌会员
create table customer(
id int primary key auto_increment,
name varchar(20) not null,
tel varchar(20) not null,
grade varchar(20) default '铜牌会员'
);
创建orders表
id 整型 主键 自动增长,
订单编号 字符串30 唯一 不能为空,
订单提交时间 时间戳类型,
客户id 整型 外键(与客户主键对应)
create table orders(
id int primary key auto_increment,
ocode varchar(30) unique not null,
createTime timestamp,
cid int not null,
constraint customer_orders foreign key orders(cid) references customer(id)
);
customer表插入数据
insert into customer values(null,'张三','13825545454','银牌会员');
insert into customer values(null,'李四','13820145999','银牌会员');
insert into customer values(null,'王五','17745589215','金牌会员');
orders表插入数据
insert into orders values(null,'jd001',null,1);
insert into orders values(null,'jd002',null,2);
insert into orders values(null,'jd003',null,1);
insert into orders values(null,'jd004',null,2);
创建goods表
id 整型 主键 自动增长,
gcode 字符串20 唯一 非空,
gname 字符串30 非空,
gprice 浮点型(8,2) 非空,
producttime 日期类型
create table goods(
id int primary key auto_increment,
gcode varchar(20) unique not null,
gname varchar(30) not null,
gprice double(8,2) not null,
producttime date
);
插入数据
insert into goods values(null,'DQ0012','电视机',2999,'2014-12-25');
insert into goods values(null,'DQ0013','洗衣机',1999,'2014-11-25');
insert into goods values(null,'DQ0014','空调扇',235,'2014-5-21');
insert into goods values(null,'SJ0012','iphone5',3288,'2014-10-27');
insert into goods values(null,'SJ0013','魅族MX5',1799,'2015-4-11');
insert into goods values(null,'RY0012','运动鞋',450,'2013-8-19');
创建orders_goods关系表
id 整型 主键 自动增长,
oid 整型 非空,
gid 整型 非空
create table orders_goods(
id int primary key auto_increment,
oid int not null,
gid int not null,
constraint orders_goods_rel foreign key orders_goods(oid) references orders(id),
foreign key orders_goods(gid) references goods(id)
);
插入数据
insert into orders_goods values(null,1,1);
insert into orders_goods values(null,1,3);
insert into orders_goods values(null,1,5);
insert into orders_goods values(null,2,1);
insert into orders_goods values(null,2,2);
insert into orders_goods values(null,3,5);
insert into orders_goods values(null,4,5);
insert into orders_goods values(null,4,6);
1.1.内连接
内连接就是在查询的时候数据之间的必须一一对应才能查出
显示内连接
语法:select 字段 from 表1 inner join 表2 on 条件
例如:
内连接需求:查询所有的用户的订单中的商品信息
select * from customer c inner join orders o on c.id=o.cid inner join orders_goods o_g on o_g.oid=o.id inner join goods g on o_g.gid=g.id;
查询客户表连接到订单表,条件是客户表中的主键id等于订单表中外键;因为订单表和商品表之间的关系是多对多,所以需要介入中间表,

隐式内连接
语法:select 字段 from 表1,表2,... where 条件
注意:一般情况下 n张表需要最少 n-1个条件可以保证数据不冗余
例如:内连接需求:查询所有的用户的订单中的商品信息
select * from customer c,orders o,orders_goods og,goods g where c.id=o.cid and o.id=og.oid and og.gid=g.id;

1.2.外连接
左外连接
保证左表中的数据全部显示,右表中的数据仅仅显示与左表有关联的,没有数据的会显示null
语法:select 字段 form 左表 left [outer] join 右表 on 条件
例如:左外连接需求:查询所有的用户的信息,如果该用户有订单信息一起显示
select * from customer c left join orders o on c.id=o.cid;

右外连接
保证右表中的数据全部显示,左表中的数据仅仅显示与右表有关联的,没有数据会显示null
语法:select 字段 from 左表 right [outer] join 右表 on 条件
例如:有外连接需求:查询所有的商品信息,如果该商品有所属的订单则一起显示订单信息
select * from orders o right join orders_goods og on o.id=og.oid right join goods g on og.gid=g.id;

1.3.子查询
查出的数据可以当作一个表看待
select * from customer where id=(select cid from orders where id=2);

备份:
mysqldump -u 用户名 -p 数据库名称 表名[表名]>磁盘路径 --回车
password:***** --回车 形成一个.sql的文件
恢复:
mysql -u 用户名 -p 数据库名称(指定导入到那一个数据库)<磁盘路径 --回车
password:***** --回车
注意:
如果指定的数据库不存在,则失败;需要自己先创建数据库
语法:
CREATE USER 用户名@地址 IDENTIFIED BY '密码';
CREATE USER user1@localhost IDENTIFIED BY ‘123’;
CREATE USER user2@’%’ IDENTIFIED BY ‘123’;
user1用户只能访问localhost
user2用户可以远程访问
语法:
GRANT 权限1, … , 权限n ON 数据库.* TO 用户名@IP
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@’%’;
语法:
REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
语法:
SHOW GRANTS FOR 用户名
SHOW GRANTS FOR user1@localhost;
语法:
DROP USER 用户名
DROP USER user1@localhost;
语法:
Use mysql;
UPDATE USER SET PASSWORD=PASSWORD(‘密码’) WHERE User=’用户名’;
FLUSH PRIVILEGES;
UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='user2';
FLUSH PRIVILEGES;
第一类:create view v as select * from table;
第二类:create view v as select id,name,age from table;
第三类:CREATE VIEW d_u as SELECT u.user_id as user_id, u.login_ip as login_ip, d.parent_id as parent_id FROM sys_dept d join sys_user u WHERE u.dept_id=d.dept_id;
第四类:create view v as (select * from table1) union all (select * from table2);
这种情况只比上面的sql语句多一个数据库的名字,如下:
create view 数据库1.v as (select * from 数据库1.table1) union all (select * from 数据库2.table2);
或
create view 数据库2.v as (select * from 数据库1.table1) union all (select * from 数据库2.table2);
如果执行第一个sql将在数据库1下建立视图,反之亦然;
这种情况稍微麻烦一点,需要先建立一个远程表来访问远程服务器的数据表,然后再对这个刚建立的远程表和本地表进行视图,步骤如下:
1、查看MySql是否支持federated引擎
(1).登录Mysql;
(2).mysql>show engines;
(3).如果显示为no,在配置文件中添加:federated (在my.ini),重新启动mysql服务。
2、创建远程表
CREATE TABLE federated_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (id)
)
ENGINE=FEDERATEDDEFAULT
CHARSET=utf8
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';
CONNECTION可以按如下方式进行配置:
(1).CONNECTION='mysql://username:password@hostname:port/database/tablename'
(2).CONNECTION='mysql://username@hostname/database/tablename'
(3).CONNECTION='mysql://username:password@hostname/database/tablename'
3、建立视图
create view 本地数据库.v as (select * from 本地数据库.table1) union all (select * from 远程数据库.test_table);
作用一:
提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。
示例:select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
但有了视图就不一样了,创建视图other。
示例:create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
创建好视图后,就可以这样获取user的name和goods的name。
示例:select * from other;
作用二:
对数据库重构,却不影响程序的运行。
假如因为某种需求,需要将user拆房表usera和表userb,
该两张表的结构如下:
测试表:usera有id,name,age字段
测试表:userb有id,name,sex字段
这时如果服务端使用sql语句:select * from user; 那就会提示该表不存在,这时该如何解决呢。
解决方案:创建视图。
以下sql语句创建视图:
create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;
以上假设name都是唯一的。此时服务端使用sql语句:select * from user;就不会报错什么的。
这就实现了更改数据库结构,不更改脚本程序的功能了。
作用三:
提高了安全性能。
可以对不同的用户,设定不同的视图。
例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。
示例如下:
create view other as select a.name, a.age from user as a;
这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不到了。
作用四:
让数据更加清晰。想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧
mysql> DROP VIEW PEOPLE_VIEW;
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好