• mysql常用命令(笔记)


    
    

    win32-mysql配置
    将win32-mysql放到某个目录下
    在配置环境变量
    C:mysqllib;C:mysqlin加入环境变量

    
    

    远程连接ubuntu下mysql:
    1、vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1
    注释掉这行,如:#bind-address = 127.0.0.1
    或者改为: bind-address = 0.0.0.0
    允许任意IP访问;
    或者自己指定一个IP地址。
    重启 MySQL:sudo /etc/init.d/mysql restart

    
    

    2、要连接远端mysql,需要将端口3306可访问
    安装ufw
    sudo apt-get install ufw
    添加规则
    sudo ufw allow 3306/tcp




    //设置数据库密码
    set password=password('sysheng');

    //创建新数据库
    CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset_name];

    //使用数据库
    USE db_name;

    //删除数据库
    DROP DATABASE db_name;

    //创建新用户
    USE mysql;
    GRANT ALL ON db_name.* TO user_name IDENTIFIED BY 'password';
    例如
    GRANT ALL ON db1.* TO dbuser1 IDENTIFIED BY 'sysheng';

    //登录mysql后
    SET NAMES utf8;
    统一字符集:
    1//首先操作系统的字符集为utf8
    2//查看操作系统字符集命令 locale
    3//创建数据库的时候使用CHARACTER SET utf8;指定字符集为utf8
    4//设置mysql_client字符集为utf8

    //SET NAMES命令为设置mysql环境的字符集
    //常用的字符集有
    --gbk,gb2312,big5,utf8,ascii

    source script_name.sql //source命令为执行一个sql脚本

    例子:
    CREATE DATABASE db1 CHARACTER SET utf8;
    USE db1;


    //
    sql是面试的重点 //建表语句 CREATE TABLE table2 ( name varchar(20), sex char(10), age INT, class varchar(20), ) //查找表结构 desc tablename; //插入数据 INSERT INTO table1 (name, sex, age, class) VALUES ('苏永胜0', '', 12, '1214'); INSERT INTO table1 (name, sex, age, class) VALUES ('苏永胜1', '', 12, '1214'); INSERT INTO table1 (name, sex, age, class) VALUES ('苏永胜2', '', 12, '1214'); //查找语句 SELECT name FROM table1; SELECT name FROM table1 LIMIT 0,5; SELECT * FROM table1 WHERE age > 21 AND age < 30; SELECT * FROM table1 WHERE age = 12; SELECT * FROM table1 WHERE name LIKE '苏%'; *mysql查询百万级别的数据速度还行,达到亿级的数据可能有点吃力 对于SELECT语句中的逻辑判断操作符一定要灵活使用,熟练 SELECT * FROM table1 WHERE age in (12, 118); SELECT * FROM table1 WHERE age NOT IN (12, 118); SELECT * FROM table1 WHERE name NOT LIKE '苏%'; //window 访问远程mysql window中加入path环境变量 C:mysqllib;C:mysqlin mysql端口号3306, 要在linux中将3306添加到防火墙的信任端口列表中 登入远程mysql命令: mysql -h IP -u 用户名 -p 列的别名 SELECT name 姓名, sex 性别, age 年龄 FROM table1; 表别名 SELECT a.name, a.sex FROM table1 a; //聚合函数 //DISTINCT 去掉重复项 SUM([DISTINCT] FILE) //求指定列的和 MAX MIN AVG COUNT SELECT SUM(age) FROM table1; SELECT SUM(DISTINCT age) FROM table1; //去掉重复值 SELECT MAX(age) FROM table1; SELECT name FROM table1 WHERE age = (SELECT MAX(age) FROM table1); SELECT name, MAX(age) FROM table1; SELECT COUNT(*) from table1; SELECT COUNT(DISTINCT *) FROM table1; SELECT * FROM table1 GROUP BY age; //聚合函数往往是和group by子句配合使用的 SELECT COUNT(class), class FROM table1 GROUP BY class; //ORDER BY SELECT * FROM table1 ORDER BY age, name desc; //多表查询 SELECT * FROM table1, table2 WHERE table1.age = table2.age; CREATE TABLE table3( teacher varchar(100), class varchar(100) ); INSERT INTO table3 (teacher, class) VALUE ('aaa', '1214'); //创建索引 在不读取整个表的情况下,索引是数据库应用程序可以更快的查找数据 可以在表中创建索引,以便加快索引速度,数据库会自动用索引 //CREATE INDEX CREATE INDEX index name ON table name (column name) //culumn name规定需要索引的列 //CREATE UNIQUE INDEX语法(唯一索引,保证字段没有重复) CREATE UNIQUE INDEX index name ON table name (column name); //例子 CREATE INDEX table1_age ON table1 (age); //在select语句中where查询用到那个字段,这个字段就必须建立索引 //SQL语句的重点是SELECT WHERE条件和多表查询 对于SELECT后面的WHERE子句中用到的字段,原则是必须建相应的索引,索引不要乱建,精准,不能多 索引可以提高SELECT语句的速度,但代价是降低了INSERT,UPDATE和DELETE语句的速度 //修改数据语句 UPDATE TABLENAME SET CLA1=VAL WHERE CAL =; //删除语句 DELETE FROM table1 where name=' '; //数据库编程 #include <mysql/mysql.h> 数据库clinet与server也是采用TCP协议, 1、初始化client 2、建立连接 3、接收和发送(客户端向server发送SQL,server将执行SQL语句的结果返回给client) 4、断开连接 //数据库编程样例 #include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> //包含mysql头文件 #include <unistd.h> #include <string.h> #include <errno.h> int main(void) { MYSQL mysql; MYSQL *conn; int status; mysql_init(&mysql); //初始化mysql,相当于mysql内部初始化了一个TCP的socket //连接到mysql server conn = mysql_real_connect(&mysql, "127.0.0.1", "dbuser1", "sysheng", "db1", 0, 0, 0); if(conn == NULL) { printf("connect error, %s ", mysql_error(&mysql)); return -1; } status = mysql_query(conn, "SET NAMES utf8"); if(status != 0) { printf("query error.%s ", mysql_error(&mysql)); return -1; } char SQL[1024]; char name[1024]; memset(SQL, 0, sizeof(SQL)); sprintf(SQL, "%s", "请输入要干掉的名字>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话是替代printf函数的,这样不许 需要 也可以向屏幕输出 memset(name, 0, sizeof(name)); read(STDIN_FILENO, name, sizeof(name)); //等待用户输入 memset(SQL, 0, sizeof(SQL)); name[strlen(name)-1] = 0; //将字符串最后一位 替换为0 //等待用户输入要删除的名字,假设用户输入的 sprintf(SQL, "DELETE FROM table1 WHERE name = '%s';", name); printf("%s ", SQL); status = mysql_query(conn, SQL); mysql_close(conn);//关闭连接 puts("Hello World!! "); return EXIT_SUCCESS; } 命令 stty erase ^H 按退格键不回显 ////////////去掉退格键回显代码//////////////////// void strattr() { struct termios term; //定义一个temions结构 if(tcgetattr(STDIN_FILENO, &term) == -1) { printf("tcgetattr error is %s ", strerror(errno)); return; } //oldterm = term //保留termios设置,以便程序退出时候可以恢复 /* term.c_lflag &= ~ICANON; //取消ICANON选项(不规范输入) term.c_lflag |= ICANON; //设置ICANON选项(规范输入) term.c_cc //字段为要设置的具体特殊输入字符,如c_cc[VERASE]代表退格键 term.c_cc[VERASE] = '';意思为把退格键修改为'' VERASE代表向前擦出一个字符,VINTR代表ctrl+C中断信号,ctrl+C的ASII码为3 例如:term_c_cc[VINTR] = ' ';意思为将tab键设置为终端信号 tcsetattr中,第二个参数说明,TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取的所有输入数据都被删除 TCSANOW:更改立即生效 TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项 */ term.c_cc[VERASE] = ''; //''为退格键的ASCII码 if(tcsetattr(STDIN_FILENO, TCSANOW, &term) == -1) { printf("tcsetattr error is %s ", strerror(errno)); } return ; } //执行SELECT语句得到查询结果,成功返回一个查询结果指针,查询无结果或者错误返回NULL MYSQL_RES result = *mysql_store_result(MYSQL *pmysql); //调用完mysql_store_result,一定要用mysql_free_result释放相关的资源 //查看查询结果 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) //例子 MYSQL_ROW row; while(row = mysql_fetch_row(result) != NULL) { printf("name:%s,sex:%s,age:%s,class:%s ", row[0], row[1], row[2], row[3]); } //尽管在表中age是数字,但mysql返回的只不过是以NULL结尾的字符串 //查看查询中的字段信息 MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result); //例子 while((sqlField = mysql_fetch_field(result)) != NULL) { printf("%s ", sqlField->name); } mysql_fetch_row 返回的是记录(行) mysql_fetch_field返回的是字段(列) //心得 模块化的时候,如果写一个函数还没有具体思想的时候,函数可以没有返回值,也没有参数,逐步的完善
  • 相关阅读:
    第 9 章 用户自己建立数据类型
    第 10 章 对文件的输入输出
    第 7 章 用函数实现模块化程序设计
    第 4 章 选择结构程序设计
    第 5 章 循环结构程序设计
    第 6 章 利用数组处理批量数据
    第 3 章 最简单的 C 程序设计——顺序程序设计
    第 1 章 程序设计和 C 语言
    第 2 章 算法——程序的灵魂
    SQL(SQL Server) 批量替换两列的数据
  • 原文地址:https://www.cnblogs.com/yongssu/p/4482703.html
Copyright © 2020-2023  润新知