create database cheatsheet;use cheatsheet;show databases;create table student
(
student_id int primary key, -- Setting primary key(first method)
first_name varchar(50),
last_name varchar(50),
class_number int,
age int,
salary real
);
create table class
(
class_number int,
class_name varchar(50),
class_location varchar(50),
st_id int,
primary key(class_number) -- Setting primary key(secund method)
);show tables;describe student;
desc student;
show columns in student;# rename table student to student_table;
alter table student_table rename to student;alter table student change column student_id st_id int;alter table student change column first_name first_name varchar(50) not null;alter table student add column salary real;alter table student drop column salary;alter table student modify column salary int;truncate student;drop table student;drop database student;insert into student (student_id, first_name, last_name, class_number, age, salary) values (1, "Refaat", "AL Ktifan", 1, 18, 100000.00);
insert into student values (2, "Mohammad", "Mohammad", 2, 20, 50000.22);insert into student (student_id, first_name) values (3, "Khaled");update student set salary = 1.1 * salary;update student set salary = 1.2 * salary where student_id = 1;delete from student where student_id = 2;delete from student;set foreign_key_checks = 1;set foreign_key_checks = 0;select * from student;select student_id, first_name from student;select student_id, first_name from student where age > 25;select * from student where salary > 3100;select * from student where salary >= 3100;select * from student where salary < 4500;select * from student where salary <= 4350;select * from student where salary > 3000 and salary < 4000;select * from student where salary between 3000 and 4000;select * from student where salary not between 3000 and 4000;select now();select * from student order by salary;
# Explanation: orders the rows from ACS = alphabetic or numeric order, or DESC the reverse
select * from student order by age DESC/ASCselect * from student where name like '%Re%'; -- Similar to *Re* in regrexselect * from student where name like 'Re_'; -- Similar to Re. in regrexselect first_name , age, (case when age > 20 then 1 else 0 end ) as boolean from student;select concat(first_name, " ", last_name) as name from student;select last_name , coalesce(age,class_number) as result from student;select last_name , format(salary, 3) as salary from student;select last_name , if(salary < 50, 'salary is < 50', salary) as salary from student limit 5;select first_name as name , (if age > 18 then "under 18" else "over") as age from student;select first_name , ifnull(age, salary) from student limit 5;create view personal_info as select first_name, last_name, age from student;select * from personal_info;update personal_info set salary = 1.1 * salary;delete from personal_info where age < 40;drop view personal_info;select e.fname, p.pname from student as e inner join project as p on e.eid = p.eid;
-- or
select e.fname, p.pname from student as e join project as p on e.eid = p.eid;select e.fname, p.pname from student as e left outer join project as p on e.eid = p.eid
union
select e.fname, p.pname from student as e right outer join project as p on e.eid = p.eid;select e.fname, p.pname from student as e left outer join project as p on e.eid = p.eid;select e.fname, p.pname from student as e right outer join project as p on e.eid = p.eid;select e.fname, p.pname from student as e left outer join project as p on e.eid = p.eid where p.pname is null;select e.fname, p.pname from student as e right outer join project as p on e.eid = p.eid where e.fname is null; DELIMITER $$
CREATE TRIGGER trigger_name
[BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON table_name
FOR EACH ROW [FOLLOWS|PRECEDES] existing_trigger_name
BEGIN
…
END$$
DELIMITER ;create table student (id serial, name varchar(100), account decimal(5,2));
insert into student (name,account) values ('Refaat',500.28);
create table orders (id serial, name varchar(40), amount decimal(5,2) );
delimeter $
create trigger trigger_exchange
after insert on orders
for each row
begin
update student
set account = account - new.amount
where cust_id = new.cust_id;
end $
insert into student (name,amount) values ('Mohammed', 10.28);select sum(population) from city group by population;select avg(population) from city group by population;select district, count(district) from city group by district;select max(population) from city group by population;select min(population) from city group by population;select stddev(population) from city group by population;select group_concat(population) from city group by population;FORMAT(number, decimal_places)UPPER(name);LENGTH(string)SUBSTR(string, start, length)select student_id, first_name, time(student_registered) from student;select id, first_name, date(student_registered) from student ;select md5("hello new world"); -- result: 6dc422ea4e83e014c4456706c72730f6select sha1("test"); -- result: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3create procedure display_dbs()
show databases;call display_dbs();drop procedure display_dbs;start transaction;savepoint sv_pt;delete from city; -- changing data in tablerollback to sv_pt;release savepoint sv_pt;commit;create table emp_dup like student;create table emp_dup select * from student;set @num = 10;
set @name = 'Anurag';select @name;set @n = 21;
select repeat("* ", @n := @n - 1) from information_schema.tables where @n > 0;select round(3.141596, 3);select repeat("* ", 20);select rand();select cast(23.01245 as signed);select concat("Mahesh", " ", "Chandra", " ", "Duddu", "!");select month("1998-12-30");select year("1998-12-30");CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';the hostname part is set to localhost, so the user will be able to connect to the MySQL server only from the localhost.
To grant access from another host, change the hostname part with the remote machine IP.
CREATE USER 'username'@'172.8.10.5' IDENTIFIED BY 'user_password';To create a user that can connect from any host, '%' is used in the hostname part:
CREATE USER 'username'@'%' IDENTIFIED BY 'user_password';GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';Asterisks(*) refers to the database and table names respectively.
By using asterisks we can give access of all the databases or tables to the user.
FLUSH PRIVILEGESAll the changes won't be in effect unless this query is fired.
GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';type_of_permission may have one of these value:
- ALL PRIVILEGES - Allows user full access to a designated database (or if no database is selected, global access across the system).
- CREATE - allows them to create new tables or databases.
- DROP - allows them to them to delete tables or databases.
- DELETE - allows them to delete rows from tables.
- INSERT - allows them to insert rows into tables.
- SELECT - allows them to use the
SELECTcommand to read through databases. - UPDATE - allow them to update table rows.
- GRANT OPTION - allows them to grant or remove other users’ privileges.
Multiple permissions are given with commas.
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'localhost';SHOW GRANTS FOR 'username'@'localhost';DROP USER 'username'@'localhost';use mysql;
update user set authentication_string=PASSWORD("<new2-password>") where User='<user>';
flush privileges;Stop MySQL service
sudo systemctl stop mysql
Restart MySQL service without loading grant tables
sudo mysqld_safe --skip-grant-tables &The apersand (&) will cause the program to run in the background and --skip-grant-tables enables everyone to to connect to the database server without a password and with all privileges granted.
Login to shell
mysql -u root
Set new password for root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MY_NEW_PASSWORD';
FLUSH PRIVILEGES;Stop and start the server once again
mysqladmin -u root -p shutdown
sudo systemctl start mysql