底層是TCP協議
Linux文件編譯時,要連接mysql數據庫
gcc -o test test_conn.c -lmysqlclient
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(); //查看當前登錄用戶
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 |
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
show databases;//查詢所有數據庫名稱show create database db1;//查詢某個數據庫的字符集
alter database 數據庫名稱 character set 字符集名稱;//修改數據庫字符集
drop database 數據庫名稱; //刪除數據庫drop database if exists 數據庫名稱;//判斷數據庫存在,存在則刪除
use 數據名稱; //使用數據庫select database(); //查詢當前正在使用的數據庫名稱
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個字符 // 輸入字符個數等于長度大小
概念:對表中的數據進行限定,保證數據的正確性,有效性和完整性
分類:
CREATE TABLE stu( id INT PRIMARY KEY, NAME VARCHAR(20) );
ALTER TABLE stu DROP PRIMARY KEY;
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
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; //添加自動增長
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);
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;
create table stu like student;//創建stu表和 student表一樣
select * into B from A where 1=0;//只復制結構
select * into B from A;//復制數據
show tables; //查詢所有表
desc 表名; //查詢表結構
show create table t_user;
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 table
drop table if exists 表名;
語法: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 條件
注: 不加任何條件 會將所有數據全部修改
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; //查詢地址
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;
運算符: >、 <、 >=、 <=、 =、 <>或 !=
SELECT * FROM student WHERE age!=35;
SELECT * FROM student WHERE age BETWEEN 30 AND 40;
SELECT * FROM student WHERE age IN(22,35,45);
? 占位符:
? _ :單個任意字符
? %:多個任意字符
SELECT * FROM student WHERE NAME LIKE '馬%'; //姓馬的人
_馬% //第二個字是馬的人 %馬% //姓名中含有馬的人 ___ //姓名是三個字的人
SELECT * FROM student WHERE english IS NULL;
SELECT * FROM student WHERE age>=20 AND age<=30;
SELECT * FROM student WHERE age = 20 OR age = 35;
SELECT * FROM student WHERE english IS NOT NULL;
order by 排序字段1 排序方式1,排序字段2 排序方式2.。。SELECT * FROM student ORDER BY math DESC, english DESC;
SELECT COUNT(english) FROM student;
SELECT COUNT(IFNULL(english,0)) FROM student;
SELECT MAX(math) FROM student;
SELECT MIN(math) FROM student;
SELECT SUM(math) FROM student; SELECT AVG(math) FROM student;
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; -- 第二頁
#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]); //
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态