文章目录

  • 数据库
    • MySQL服务启动
      • 登录和退出
  • SQL
    • 分类
  • DDL
    • 操作数据库:CRUD
      • Create:创建
      • Retrieve:查询
      • Update:修改
      • Delete:删除
      • 使用数据库
    • 操作表
      • Create:创建
        • 数据类型
        • 约束
          • 主键约束:primary key
          • 非空约束:not null 某一列的值不能为null
          • 唯一约束:unique 某一列的值不能重复
          • 外键约束:foreign key
      • 复制表
      • Retrieve:查询
      • Update:修改
      • Drop:删除
  • DML
    • 添加数据
    • 删除数据
    • 修改数据
  • DQL
    • 查询表中的记录
    • 基础查询
      • 多个字段的查询
      • 去除重复 DISTINCT
      • 计算列
      • 起别名
    • 条件查询
      • where字句后跟条件
      • BETWEEN AND
      • IN(集合)
      • LIKE:模糊查询
      • IS NULL
      • AND &&
      • OR ||
      • NOT !
  • 查询语句
    • 排序查询
    • 分组查询:
    • 分页查询
  • Linux访问mysql

数据库

底层是TCP协议
Linux文件编译时,要连接mysql数据库

gcc -o test test_conn.c -lmysqlclient
  • 进入mysql

MySQL服务启动

​ 1.手动

​ 2.cmd ->services.msc

​ 3.管理员身份打开cmd

​ net stop MySQL57:启动mysql服务

​ net start MySQL57:关闭mysql服务

登录和退出

  • 登录
    ​ mysql -u root -p
    ​ mysql -hip -u root -p
    ​ mysql --host=ip --user root --password

  • 退出:
    exit
    quit
    ctrl + d

  • 目录结构
    ​ 安装目录
    ​ 数据目录


  • root

    root % 远程登录
    root localhost 从本地登录数据库

  • 修改密码

管理员用户状态下:
alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY  '111111';
select version(); //显示当前版本
select database(); //查看当前使用的是那个数据库
select user(); //查看当前登录用户

SQL

Structured Query Language 结构化查询语言

语法

  • 可以单行或多行书写,以分号结尾
  • 空格和缩进 增强语句可读性
  • MySQL中的SQL语句不区分大小写,关键字建议使用大写
  • 注释: ​ 单行注释:-- 或 # ​ 多行注释:/* */

分类

DDL(Data Definition Language)数据定义语言 DML(Data Manipulation Language)数据操作语言 DCL(Data Control Language)数据控制语言 DQL(Data Query Language)数据查询语言
定义数据库对象:数据库 表 列等, 对数据库中表的数据进行增删改 数据库的访问权限和安全级别,创建用户 ​ 查询数据库中表的记录数据
关键字:create,drop,alter 关键字:insert,delete,update 关键字:GRANT, REVOKE 关键字:select,where

DDL

操作数据库:CRUD

Create:创建

   create database db1;//创建数据库create database db1 character set utf8;//创建数据库时默认utf8create database if not exists db1;//db1不存在时创建数据库,存在则不创建create database if not exists db1 character set utf8;//创建数据库,判断是否存在,并指定字符集为utf8

Retrieve:查询

   show databases;//查询所有数据库名称show create database db1;//查询某个数据库的字符集

Update:修改

alter database 数据库名称 character set 字符集名称;//修改数据库字符集

Delete:删除

 drop database 数据库名称; //删除数据库drop database if exists 数据库名称;//判断数据库存在,存在则删除

使用数据库

 use 数据名称; //使用数据库select database(); //查询当前正在使用的数据库名称

操作表

Create:创建

   create table 表名(列名1 数据类型1 约束,列名2 数据类型2,...列名n 数据类型n        //最后一列不需要逗号);
create table student(id int,name varchar(32),age int,score double(4,1),birthday date,insert_time timestamp
);
create table #Temp(字段1 类型,字段2 类型...);//临时表表名前面加“#”

数据类型

1.int:整数类型TINYINT:字节大小:1
2.double:小数类型
3.date:日期,年月日
4.datetime:日期,年月日时分秒
5.timpstamp:时间错类型,年月日时分秒,如果不赋值,或赋值为null,则默认使用当前系统时间来自动赋值
6.char : 0~255  长度大小等于输入字符个数加一
varchar:字符串,name varchar(20):姓名最大20个字符  // 输入字符个数等于长度大小

约束

概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性

分类:

主键约束:primary key
  • 非空且唯一
  • 一张表只能有一个字段为主键
  • 主键就是表中记录的唯一标识
  • 创建表时添加主键约束
CREATE TABLE stu( id INT PRIMARY KEY, NAME VARCHAR(20)  );
  • 删除主键
ALTER TABLE stu DROP PRIMARY KEY;
  • 创建表完后添加主键
 ALTER TABLE stu MODIFY id INT PRIMARY KEY;
  • 自动增长
    如果某一列是数值类型的,使用auto_increment可以来完成值自动增长
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20)
); //创建表时添加主键约束,并完成主键自动增长ALTER TABLE stu MODIFY id INT;    //删除自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;  //添加自动增长
非空约束:not null 某一列的值不能为null
  • 创建表时添加约束
 CREATE TABLE stu( id INT, nam VARCHAR(10) NOT NULL -- name非空 );
  • 创建表完后添加非空约束
     ALTER TABLE stu MODIFY NAME VARCHAR(10) NOT NULL;
  • 删除非空约束
 ALTER TABLE stu MODIFY NAME VARCHAR(10);
唯一约束:unique 某一列的值不能重复
  • 唯一约束可以有null值,但是只有一条记录为null
  • 删除唯一约束
      ALTER TABLE stu DROP INDEX phone_number;
  • 创建表时添加唯一约束
 CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE );
  • 表创建后添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(10) UNIQUE;
外键约束:foreign key

复制表

create table stu like student;//创建stu表和 student表一样
select * into B from A where 1=0;//只复制结构
select * into B from A;//复制数据

Retrieve:查询

show tables; //查询所有表
desc 表名; //查询表结构
show create table t_user;

Update:修改

alter table 表名 rename to新的表名; //修改表名
show create table 表名;//查看表的字符集
alter table 表名 character set 字符集名称; //修改表的字符集
alter table 表名 add 列名 数据类型;  //添加一列
alter table stu change 列名 新列名 新数据类型; //修改列名称类型
alter table stu modify 列名 新数据类型;  //修改列类型
alter table stu drop 列名; //删除列

Drop:删除

drop table
drop table if exists 表名;

DML

添加数据

   语法:insert into 表名(列名1,列名2,,列名n) values(值1,值2,,值n);

注:

1.列名和值要一一对应

2.如果表名后,不定义列名,则默认给所有列添加值

3.除了数字类型,其他类型需要用引号(" ") 引起来 、单双都可以

删除数据

   //语法:delete from 表名 [where 条件];

注:

​ 1.如果不加条件,则删除表中所有记录

​ 2.要删除所有记录

​ 1.delete from 表名; --不推荐使用,有多少条记录就会执行多少次删除操作

​ 2. TRUNCATE TABLE 表名; 推荐使用、先删除表,并且创建一张一样的表

修改数据

语法:update 表名 set 列名1 = 值1,列名2 = 值2.。。 where 条件

注: 不加任何条件 会将所有数据全部修改

DQL

查询表中的记录

1.语法

select
​      字段列表from
​      表名列表where
​      条件列表group by
​     分组字段having
​      分组之后的条件order by
​      排序limit
​      分页限定

基础查询

多个字段的查询

 select 字段名1,字段名2.。。。from 表名;

注意:查询所有字符段可以使用*来代替字段列表

SELECT NAME,age FROM student;
SELECT * FROM student;          //查询所有的信息
SELECT address FROM student;    //查询地址

去除重复 DISTINCT

 SELECT DISTINCT address FROM student;        //消除相同的地址 SELECT DISTINCT NAME,address FROM student;   //当姓名和地址都相同时才会消除

计算列

可以使用四则运算计算一些列的值(数值型)

IFNULL(表达式1,表达式2):null 参与的运算,计算结果都为null

​ 表达式1:那个字段需要判断是否为空

​ 表达式2:如果该字段为null 后的替换值

SELECT NAME,math,english,math+english FROM student; //如果有null参与的运算计算结果都为null SELECT NAME,math,english,math+IFNULL(english,0) FROM student;

起别名

AS 或者 空格

 SELECT NAME,math,english,math+IFNULL(english,0) AS 总分 FROM student; SELECT  NAME,math,english,math+IFNULL(english,0) 总分 FROM student;

条件查询

where字句后跟条件

运算符: >、 <、 >=、 <=、 =、 <>或 !=

SELECT * FROM student WHERE age!=35;

BETWEEN AND

SELECT * FROM student WHERE age BETWEEN 30 AND 40;

IN(集合)

SELECT * FROM student WHERE age IN(22,35,45);

LIKE:模糊查询

​ 占位符:

​ _ :单个任意字符

​ %:多个任意字符

     SELECT * FROM student WHERE NAME LIKE '马%';  //姓马的人
_马% //第二个字是马的人                                                                                   %马%    //姓名中含有马的人                                                                ___     //姓名是三个字的人

IS NULL

SELECT * FROM student WHERE english IS NULL;

AND &&

SELECT * FROM student WHERE age>=20 AND age<=30;

OR ||

SELECT * FROM student WHERE age = 20 OR age = 35;

NOT !

SELECT * FROM student WHERE english IS NOT NULL;

查询语句

排序查询

  • order by 子句
    排序方式
    ASC:升序 默认的
    ​ DESC:降序

    如果有多个排序条件,则前边的条件值一样时,才会判断第二条件
  order by 排序字段1 排序方式1,排序字段2 排序方式2.。。SELECT * FROM student ORDER BY math DESC, english DESC;
  • 聚合函数:将一列数据作为一个整体,进行纵向的计算
  1. count:计算个数
    ​ 会默认排除null值
SELECT COUNT(english) FROM student;
SELECT COUNT(IFNULL(english,0)) FROM student;
  1. max:计算最大值
  2. min:计算最小值
SELECT MAX(math) FROM student;
SELECT MIN(math) FROM student;
  1. sum:计算和
  2. avg:计算平均值
 SELECT SUM(math) FROM student; SELECT AVG(math) FROM student;

分组查询:

  • group by 子句
    注意:
  1. 分组之后查询的字段:分组字段,聚合函数
  2. where 和having区别
    where在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足条件,则不会被查询
    ​ where后不可以跟聚合函数,having可以进行聚合函数的判断
  SELECT sex,AVG(math),COUNT(id) FROM student GROUP BY sex; SELECT sex,AVG(math),COUNT(id) FROM student WHERE math>70 GROUP BY sex HAVING COUNT(id)>2;

分页查询

语法:limit 开始的索引,每页查询的条数

公式:开始的索引 = (当前的页码-1)*每页显示的条数

limit是MySQL的“方言”

 SELECT * FROM student LIMIT 0,3; -- 第一页SELECT * FROM student LIMIT 3,3; -- 第二页

Linux访问mysql

#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h> //引用头文件
int main() {
MYSQL mysql; //初始化连接
if ( mysql_init(&mysql) == NULL ) { printf("mysql init err\n");
return 0; }
if ( mysql_real_connect(&mysql,"localhost","root","123456","testdb",3306,NULL,0) == NULL)
//连接数据库
{printf("connect mysql failed\n");
return 0;
}
printf("connect mysql success\n");
//char* sql = "insert into student2 values(6,'小王')";
char* sql = "select * from student2";
int query_res = mysql_query(&mysql,sql);
if ( query_res != 0 ) {printf("queryerr:%s\n",mysql_error(&mysql));
return 0; }
//MYSQL_RES * mysql_res =mysql_use_result(&mysql);
MYSQL_RES * mysql_res =mysql_store_result(&mysql);
if ( mysql_res == NULL ) {
printf("result err:%s\n",mysql_error(&mysql));
return 0; }
//判断返回的行数
int num = mysql_num_rows(mysql_res);
if ( num == 0 ) {
printf("没有记录\n");
return 0; }
printf("得到:%d 条记录\n",num);
MYSQL_ROW sqlrow;
for( int i = 0; i < num; i++) {
sqlrow = mysql_fetch_row(mysql_res);
if (sqlrow == NULL) { printf("数据处理完,或者出错\n");
break; }
//判断列数
int fields = mysql_field_count(&mysql); for( int j = 0; j < fields; j++) { printf("fieds[%d]=%s\n",j,sqlrow[j]); } }
//MYSQL_ROW sqlrow = NULL;
//while( ( sqlrow = mysql_fetch_row(mysql_res)))
//{ //printf("sqlrow[0]=%s,sqlrow[1]=%s\n",sqlrow[0],sqlrow[1]); //
}

Linux || MySQL数据库基础语句相关推荐

  1. Linux Mysql 数据库基础

    目录 Linux Mysql 数据库基础 一.数据库 数据库简介 数据库的分类 数据库的发展史 数据库系统发展阶段 DBMS 数据库管理系统 数据库管理系统的优点 数据库管理系统的基本功能 数据库系统 ...

  2. mysql数据库基础语句讲解

    mysql数据库基础讲解 一.数据库客户端命令 二.数据库基础sql语句 三.数据表基础语句 四.数据的增删改查(重点) 切记sql语句之后一定要加 ; 一.数据库客户端命令 1.mysql: mys ...

  3. Mysql数据库基础语句总结

    MYSQL数据库练习笔记 一.准备操作     启动mysql服务器: net start mysql 关闭mysql服务器: net stop mysql 登陆客户端数据库: mysql -u用户名 ...

  4. linux下mysql数据库基础及客户端命令详解

    linux下mysql数据库基础及客户端命令详解 1.mysql数据库存储引擎: SHOW ENGINES;   #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: ...

  5. Linux MYSQL 数据库

    Linux MYSQL  数据库 1.1.概述: DBMS datebase management system  数据库管理系统 DML:date manapulate lanaguage  数据操 ...

  6. 使用C语言访问MySQL数据库基础

    使用C语言访问MySQL数据库基础 一.MySQL管理 包含在MySQL发行版中的一些有用的工具程序使管理工作变得相当容易. 除mysqlshow命令以外,所有的MySQL命令都接受所示的3个标准参数 ...

  7. MySQL数据库基础(五)——SQL查询

    MySQL数据库基础(五)--SQL查询 一.单表查询 1.查询所有字段 在SELECT语句中使用星号""通配符查询所有字段 在SELECT语句中指定所有字段 select fro ...

  8. mysql 磁盘限额_Linux运维知识之为Linux MySQL数据库设置磁盘限额

    本文主要向大家介绍了Linux运维知识之为Linux MySQL数据库设置磁盘限额,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 因为MySQL数据库本身没有磁盘限额的功能,我 ...

  9. linux mysql 磁盘_Linux运维知识之为Linux MySQL数据库设置磁盘限额

    本文主要向大家介绍了Linux运维知识之为Linux MySQL数据库设置磁盘限额,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 因为MySQL数据库本身没有磁盘限额的功能,我 ...

最新文章

  1. 1013. 数素数 (20)
  2. 做网页需要学哪些计算机知识,网页美工设计需要掌握的电脑常识
  3. 下次迟到的借口有了!牛津大学发现时钟越准确,产生的熵越高
  4. 北京soul_打破虚拟迎接现实,“Soul”让网络社交楚楚不凡
  5. nginx的error.log日志常见的几个错误解决方法
  6. Py之seaborn:数据可视化seaborn库(二)的组合图可视化之密度图/核密度图分布可视化、箱型图/散点图、小提琴图/散点图组合可视化的简介、使用方法之最强攻略(建议收藏)
  7. 发表国外期刊注意事项
  8. 力扣--让字符串成为回文串的最少插入次数
  9. matlab符号函数绘图法_转载:MATLAB 符号函数作图
  10. java asm tree_使用ASM 4处理Java类文件–第二部分:Tree API
  11. leetcode——15.3Sum
  12. 国嵌c语言深度,国嵌C语言3部全
  13. 【Elasticsearch】 解决数据较少的时候 算分不准的问题 dfs_query_then_fetch
  14. 数据可视化的关键因素有哪些
  15. 基本数据类型的包装类和随机数
  16. 纳德拉:Excel是微软的最佳象征 难以想象没有它的世界
  17. HDMI中所说的EDID是什么
  18. IDA及插件MIPSROP安装——《揭秘家用路由器0day漏洞挖掘技术》学习笔记
  19. Excel收纳箱:如何通过VBA获A列数据的最大行数
  20. 计算机毕业设计Python+uniapp基于微信小程序某企业考勤系统(小程序+源码+LW)

热门文章

  1. JS正则——身份证正则
  2. 如何远程管理Linux服务器?
  3. webpack vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin
  4. Flash入门教程:给任意照片添加雪景动画_Flash_||太平洋电脑网
  5. Latex 引入参考文献 \begin{document}报错
  6. outlook恢复本地邮件到服务器
  7. 云计算——云计算部署形成及应用
  8. python爬取网抑云音乐评论
  9. 电容笔和触控笔区别有哪些?平板电脑平替电容笔排行榜
  10. python 字符串转16进制