数据库操作:

1。创建数据库,并修改默认字符编码

create database 数据库名 [charset=字符编码];

ee:

create database dog charset=utf8;

ps:

1.1。如果数据库已经存在,那么会报错。可以通过下面的语句来创建数据库:

create database if not exists 数据库名;

其实就是在创建数据库的时候判断一下是否之前已经存在该数据库了。

1.2。如果想要创建一个用关键字命名的数据库,可以用反引号来创建。反引号的位置在数字1的左边,

一定要在英语半角格式下使用才生效。

ee:

create database `database`;

2。查询数据库

show databases;

ps:

database是复数的,不然会报错。

3。显示数据的创建语句,可以看到编码格式的

show create database 数据库名;

ee:

4。更改数据库

字符编码和数据库引擎

alter database 数据库名 [目标参数]

ee:

alter database dog charset=gbk;

5。删除数据库

drop database 数据库名;

ee:

drop database dog;

ps:

如果删除不存在的数据库会报错,最好是在操作之前先判断一把。

drop database if exists 数据库名;

6。选择数据库

use 数据库名;

ee:

use dog;

数据库表的操作

关系: 行---记录  列---字段

1。创建表

create table 表名(

主键字段 数据类型1 [null/not null] [default] [auto_increment] [primary key],

非主键字段 数据类型2,

...........

);

ps:

主键:非空唯一

数据库中只有字符,没有字符串的概念

用关键字做表名需要加反引号,用关键字做字段名需要加反引号,跟上面用关键字做数据库名做法一致.

数据类型: int /char(定长) /varchar(可变长)/text(大文本)/decimal(总位数,小数点后位数)

ee:

1.1 电话号码---varchar //性别---char //年龄---int/tinyint(max:255) //照片---不用binary,数据中只存储照片的路径

薪水---decimal //QQ---varchar //手机号---char

1.2 姓名---not null // 地址---not null //邮件---null //成绩---null

2。查看表

show tables;

ps:

tables是复数的。

3。查看已创建表(可显示表的详细信息)

show create table 表名 \G

ee:

show create table dog \G

ps:

\G: 表示table字段和create table字段的排列方式变成竖立的形式

未使用\G 时的表的明细截图:(ps:不加";")

从创建数据库到创建表过程截图:

漏了一点,还有就是能知道创建表的名字

 4。显示表结构

describe 表名;

或者使用缩写形式的指令查询,效果是一样的:

desc 表名;

ee:

desc dog;

5。删除表

drop table 表名;

可以删除多个表,当有外键关系约束时,要注意删除顺序,先删除包含外键的从表,再删除主表。

drop table 表名1,表名2,...;

ee:

drop table dog;

drop table t1,t2,t3;

ps:

latin 2个字符一个中文

utf8 1个字符一个中文

latin编码环境下输入中文会导致无效值

6。查询字符编码:

show variables like 'character_set_%';

数据操作

1。插入数据(增)

insert into 表名(字段名1,字段名2,......,字段名n) values(值1,值2,......,值n)

或者:(必须插入的值和数据表的字段顺序和个数都一致):

insert into 表名 values(值1,值2,......,值n)

自动增长主键id插入数据:(主键必须设置为null):

insert into 表名(id,字段名2,......,字段名n) values(null,值2,......,值n)

ps:

细节:

1.1。插入的字段可以和数据库中的字段顺序不一致,但是值必须和插入的字段的顺序保持高度一致,否则会报错。

ee:

insert into dog(id,name) values(1,'tom');

1.2。插入字段是可以省略的,插入的值和数据表的字段顺序和个数都一致

ee:

insert into dog values(1,'tom');

1.3。自动增长的主键id,在插入数据时可以id字段用null表示

ee:

insert into dog values(null,'tom');

1.4。插入默认值(字段有指明使用默认值的时候)

ee:

insert into dog values(2,default);

2。删除数据(删)

delete from 表名 where 条件

delete和drop的区别

delete表示将表中的数据全部删除,但是表的字段仍存在。

drop表示表的所有信息全部被删除。

ps:

auto_increment 这个机制,当表中的记录被删除时,自动增长的记录不将再是被删除的记录的id号,

被删除得那条记录可以通过数据库的日志恢复

3。查询数据(查)

select 列名 from 表名 [where 条件] [order by 排序 asc|desc] [limit 分页参数(起始位置,查询的记录数)];

模糊查询:

select 列名 from 表名 where 字段名1 like '%参数%';

ps:

* 表示所有字段

asc 表示升序

desc 表示降序

(默认是按照升序排列)

模糊查询时,模糊部分必须加单引号!!!

limit 的使用细节

ee:

select * from dog limit 3;  #限制取前3条记录

select * from dog limit 0,3;  #和上面的语句等价

数据库中第一条记录的位置是标记为0.

补充: mysql运算符

比较运算符:>, >=, <, <=, =, <>(不等于)

逻辑运算符:and,or,not

4。修改数据(改)

update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3 where 条件

一些问题:

主键列输入的数值,不允许为空;

一个表不可以有多个主键,但是主键可以由多个列组成;

标识列(自动增长列)不能为字符数据类型(数字自动增长);

聚合函数

sum(),avg(),max(),min(),count()

括号内带参数,参数是数据库表的字段名

查看本机上数据库的位置:

show global variables like "%datadir%";

2019-02-25 13:01:36

数据定义语言(DDL,data definition language) ,操作对象是数据库和表。

修改表的语句,修改的粒度:表名,字段,字符集。

1 修改表的名称(rename to)

alter table 原表名 rename to 新表名;

rename table 原表名 to 新表名;

例: alter table user rename to users;

2 修改表的编码字符集。(character set )

alter table 表名 character set 字符集;

例:alter table users character set gbk;

3 向表中添加新的列。(add)

alter table 表名 add <column> 列名 列的数据类型 [<列的完整性约束>];//column可省略

例: alter table user add `like` varchar(256); //注意字段处的引号

4 修改表中的某一列。

a)修改表中某一列的列名(同时可修改列的数据类型)(change)

mysql>alter table 表名 change 原列名 新列名 原列数据类型; // 必须指定原列的数据类型

例, alter table user change `like` `likes` varchar(256);

b)修改表中某一列的数据类型(modify)

alter table 表名 modify 列名 列新的数据类型;

例,alter table user modify `likes` varchar(128);

5 删除表中的某一列。(drop)

alter table 表名 drop <column> 列名; //column可省略

例: alter table user drop `likes`;

修改表的字符集时,将表的字符集设置为gbk,但是出现一个问题,字段的字符集仍然使用的是utf-8

使用下面的语句可以将所有字段和表的字符集设置成utf-8:

alter table user convert to character set utf8;

如果想设置成字符集是gbk,只要将上面的语句utf8换成gbk即可。

参考博客:

https://blog.csdn.net/luo4105/article/details/50804148

https://blog.csdn.net/ylyang12/article/details/53241629

2018-10-19 14:49:59

MySQL函数

FIND_IN_SET(str,strlist):字符串str在字符串列表strlist中,则返回该字符串字符串列表中的位置(1到N之间,N为字符串列表长度)。

str 是某字段名,类型是字符串,strlist是某变量名,类型是字符串,由英文逗号连接的字符串

例如,SELECT FIND_IN_SET('1','1,2,3,4'); //返回值为1,即第1个值

SELECT FIND_IN_SET('b','a,d,c,b,e'); //返回值为4,即第4个值

场景:根据一堆id值查询激活的key,使用MyBatis查询MySQL

     @Select("select `key` from " + TABLE_ACTIVE + " where FIND_IN_SET(id, #{ids}) <> 0")
     List<String> getActiveKeys(@Param("ids")List<Integer> ids);

2018-10-06 22:35:37

mysql查询系统时间

 select current_date; # 显示系统的日期

 select now(); #显示系统的日期和时间

mysql注释

单行注释使用符号"#",单行注释的另一种写法:两个横杠加一个空格,"-- "

多行注释使用符号 "/*这是多行注释的写法!!!*/"

mysql几个关于筛选的条件的关键字的使用

from,where,group by,having,order by

最基本的组合:from+where

组合使用:group by和having???

where==having???

2018-08-29 23:45:56

创建简单表:

 create table user (
 id int primary key auto_increment not null,
 name ) not null,
 sex ) not null
 )engine=InnoDB charset=utf8;

创建关联表:

 create table employee (
   id ) primary key not null auto_increment,
   dep_id ), --定义外键dep_id
   name ) default null,
   pwd ) default null,
   phone ) default null,
   email ) default null,
   foreign key(dep_id) references department(id) --外键dep_id关联另一个表的主键
 ) engine=InnoDB default charset=utf8;

 create table department (
   id ) primary key not null auto_increment,
   name ) default null,
   ) defaul null
 ) engine=InnoDB default charset=utf8;

mysql5.7.22-64免安装版配置:

使用mysqld命令时要初始化:

 mysqld --user=mysqli --basedir=D:\softwareInstall\softwareDev\mysqli  --datadir=D:\softwareInstall\softwareDev\mysqli\data --initialize-insecure

使用my.ini不起作用,直接在控制台用指令指定其作用。

安装mysql服务:

 mysqld install MYSQLi --defaults-file="D:\softwareInstall\softwareDev\mysqli\my.ini"

修改注册表,regedit.exe调出,找到MYSQLi服务的名称,修改它的ImagePath值

原先它是这样的:

 D:\softwareInstall\softwareDev\mysql\bin\mysqld --defaults-file=D:\softwareInstall\softwareDev\mysqli\my.ini MYSQLi

标志红色的部分跟默认端口的mysql的安装路径是一样的,需要把它改成端口是3307的mysql的安装路径。

修改后是这样的:

 D:\softwareInstall\softwareDev\mysqli\bin\mysqld --defaults-file=D:\softwareInstall\softwareDev\mysqli\my.ini MYSQLi

和原来的只差一个字母。

修改密码:

 D:\softwareInstall\softwareDev\mysqli\bin>mysql -uroot;
 mysql> use mysql;
 mysql") WHERE user='root'; # 报错4 mysql>  UPDATE user SET authentication_string=PASSWORD("123456") WHERE user='root';#生效

如何在cmd启动另一mysql呢?只要指定它的端口就可以了。默认端口3306是不用指定的。

 C:\Users\rui  # -P(P是大写的,表示端口号) 通过"-P"指定windows中的另一个mysql的端口号

2018-09-05 19:10:37

windows访问linux mysql:(环境:centos6.8)

 # 启动mysql
 service mysqld start

 mysql -uroot -p

 use mysql

 update user set host = '%' where user = 'root';

 flush privileges;

 #开放防火墙端口
 vim /etc/sysconfig/iptables14 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT1516 service iptables restart

疑惑:

1、pojo 定义id为String类型,user表定义id为int类型,系统没有报错,是如何转化的?

2、user表必须定义id为auto_increment,否则需要指定id值,还会报错!?

数据类型:数字,日期和时间,字符串

整型:tinyint,smallint,mediumint,int,bigint

可以有符号或者无符号

  tinyint smallint mediumint int bigint
有符号 -128到127 -32768到32767 -8388608至8388607 -2147483648到2147483647 -9223372036854775808到9223372036854775807
无符号 0到255 0到65535 0到16777215 0到4294967295 0到18446744073709551615
字节长度 1个字节 2个字节 3个字节 4个字节 8个字节

浮点数:float(m,d)[默认为float(10,2),占4个字节],double(m,d)[默认为float(16,4),占8个字节],decimal(m,d)

m表示数字的总位数(包括小数的位数),d表示小数位数

时间和日期类型

  date datetime timestamp time year(m)
格式 YYYY-MM-DD YYYY-MM-DD HH:MM:SS YYYYMMDDHHMMSS HH:MM:SS  
范围 1000-01-01和9999-12-31之间 1000-01-01 00:00:00 到9999-12-31 23:59:59 1970年1月1日到2037的时间戳  

m=2:1970至2069(70〜69)

m=4:1901-2155(默认)

示例 2018年1月1日将被存储为2018-01-01 2018年01月01日下午1:10,会被存储为2018-01-01 13:10:00      

字符串类型

  char(m) varchar(m)

blog/

text

tinyblog/

tinytext

mediumblog/

mediumtext

longblog/

longtext

enum
范围 固定长度,1到255个字符长度,默认为1 可变长度,1到255个字符长度,需要定义长度

最大为65536个字符长度,text不分大小写,不用指定长度

255个字符长度,不用指定长度 最大为16777215个字符长度,不用指定长度 最大为4294967295个字符长度,不用指定长度 列表

note:

v1.1(2018-05-15 21:33:16)

增加了查看数据库物理位置的指令

v1.2(2018-06-10 23:40:20)

增加了如何安装另一个mysql的方法,以及启动另一个mysql server的方法

sql---->sql-summary&mysql-summary的更多相关文章

  1. dapper之连接数据库(Oracle,SQL Server,MySql)

    因为项目需求,需要项目同时可以访问三个数据库,因此本人经过一番研究,得出以下代码. 1.建立公共连接抽象类(DataBase) public abstract class DataBase { /// ...

  2. SQL Server、MySQL主从搭建,EF Core读写分离代码实现

    一.SQL Server的主从复制搭建 1.1.SQL Server主从复制结构图 SQL Server的主从通过发布订阅来实现 1.2.基于SQL Server2016实现主从 新建一个主库&quo ...

  3. How to Disable Strict SQL Mode in MySQL 5.7

    If your app was written for older versions of MySQL and is not compatible with strict SQL mode in My ...

  4. 通过sql server 连接mysql

    图文:通过sql server 连接mysql   1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/con ...

  5. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

  6. 数据库 SQL Server 到 MySQL 迁移方法总结

    最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 ...

  7. Monitor All SQL Queries in MySQL (alias mysql profiler)

    video from youtube: http://www.youtube.com/watch?v=79NWqv3aPRI one blog post: Monitor All SQL Querie ...

  8. sql server和my sql 命令(语句)的差别,sql server与mysql的比較

    sql与mysql的比較 1.连接字符串 sql  :Initial Catalog(database)=x;  --数据库名称       Data Source(source)=x;        ...

  9. sql点滴42—mysql中的时间转换

    原文:sql点滴42-mysql中的时间转换 UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时 ...

  10. sql点滴42—mysql中的数据结构

    原文:sql点滴42-mysql中的数据结构 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小 ...

随机推荐

  1. 标签无效 "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" 预计。

    Centos7.5 使用导入percona模板的时候报错 百度给的解决方案是 将zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1. ...

  2. 2199: [Usaco2011 Jan]奶牛议会 2-sat

    链接 https://www.luogu.org/problemnew/show/P3007 https://www.lydsy.com/JudgeOnline/problem.php?id=2199 ...

  3. 【做题】arc068_e-Snuke Line——利用特殊性质分讨

    显然,对于所有跨度暴力扫一遍的复杂度本身只有\(O(n \log n)\). 容易想到在每一个到达的位置加上覆盖这个位置的区间数.剩下的问题就在于如何处理覆盖了多个位置的区间. 记录已访问或去重都是难 ...

  4. JMeter常用菜单以及设置

    如何清空View Results Tree 先选中目标view results tree,然后在菜单上选择Run-->Clear https://stackoverflow.com/questi ...

  5. P2504 [HAOI2006]聪明的猴子

    思路 最小生成树中最大的边,边权最小 所以这题就变成最小生成树的板子了,跳跃距离大于最大边权的猴子就是可行的 代码 #include <cstdio> #include <algor ...

  6. ocacle sql: 两张表左连接 ,1对多,取一条数据,取按时间最新的

    说明: MBGL_GZJH jh_id 对应 mbgl_gzjh_fkmx jh_id mbgl_gzjh_fkmx jh_id 有重复多条,但是 FKRQ 不一样,我们去 FKRQ 最新的一条. s ...

  7. ES6中的函数和数组补漏

    对象的函数解构 我们在前后端分离时,后端经常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据当作参数,传递到函数内部进行处理.ES6就为我们提供了这样的解构赋值. let json ...

  8. Linux命令1——a

    addUser: -c:备注 -d:登陆目录 -e:有效期限 -f:缓冲天数 -g:组 -b:用户目录 -G:附加组 -s:制定使用默认的shell -u:指定用户ID -r:建立系统账号 -M:不自 ...

  9. 正则匹配-URL-域名

    DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母.标号中除连字符(-)外不能使用其他的标点符号.级别最低的域名写在最左边,而级别最高的域名写在最右边.由多 ...

  10. [0412]SQL Server 2008 R2 安装 & 设置

    SQL Server 2008 R2 安装 & 设置 Sql Server 安装 安装环境: Windows 10 1709 64位 安装文件: Sql Server 2008 R2 Sql ...