docker命令詳解大全,Linux || MySQL數據庫基礎語句

 2023-12-06 阅读 33 评论 0

摘要:文章目錄數據庫MySQL服務啟動登錄和退出SQL分類DDL操作數據庫:CRUDCreate:創建Retrieve:查詢Update:修改Delete:刪除使用數據庫操作表Create:創建數據類型約束主鍵約束:primary key非空約束:not null 某一列的值不能

文章目錄

  • 數據庫
    • 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服務啟動

docker命令詳解大全?? 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

  • 目錄結構
    ? 安裝目錄
    ? 數據目錄


  • sql語言修改數據的語句。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 結構化查詢語言

數據庫from語句。語法

  • 可以單行或多行書寫,以分號結尾
  • 空格和縮進 增強語句可讀性
  • 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);

注:

LINUX教程。1.列名和值要一一對應

2.如果表名后,不定義列名,則默認給所有列添加值

3.除了數字類型,其他類型需要用引號(" ") 引起來 、單雙都可以

刪除數據

   //語法:delete from 表名 [where 條件];

注:

Mysql命令、? 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]); // 
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/190554.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息